我在使用ExecutorService
时遇到问题,理想情况下我正在寻找一种解决方案来让线程池中的所有线程都处于睡眠状态(使用Adwords API,当推送一些广告时,我得到的速率超出了我捕获的错误,然后睡眠该线程,但其他线程不知道该错误,并仍然工作命中API超过速率响应,这增加了等待时间,直到另一个请求可以处理)。
有没有简单的方法可以同时睡眠所有线程?我试图找到任何解决方案,我有一个想法,但我确信那里存在类似的东西。
感谢您的帮助,祝您度过愉快的一天。
答案 0 :(得分:2)
一个线程无法“睡眠”另一个线程,即使有可能,也不是一个好主意。线程应该合作。
如果您正在使用ExecutorService,那意味着有一个任务队列。最简单的解决方案是限制将任务放入队列的速率。
另一种解决方案是创建一个所有任务都知道的全局“油门”对象。它会有一个方法,每个任务可以调用等待,直到它可以去。你想对这个对象的同步方式进行一些思考:如果你想要达到的最大速率很高,那么简单的全局锁定可能是一个重大的瓶颈。