我有以下代码片段,可以正常运行。但问题是它一开始就创建并将2000多个任务放在执行器队列中。
我需要检查执行器队列中的任务是否已经完成,只有在这种情况下才会添加更多任务。它不需要很精确,例如,如果队列中只剩下<10个任务,则再添加50个。
这样,执行器任务队列就不会有那么多待处理任务,这也将使关闭()能够及时工作,否则即使调用了该函数,执行器仍然会尝试先完成其队列中的所有2000个任务。
如何最好地实现这一点?谢谢。
使用信号量进行更新:
我需要检查执行器队列中的任务是否已经完成,只有在这种情况下才会添加更多任务。它不需要很精确,例如,如果队列中只剩下<10个任务,则再添加50个。
这样,执行器任务队列就不会有那么多待处理任务,这也将使关闭()能够及时工作,否则即使调用了该函数,执行器仍然会尝试先完成其队列中的所有2000个任务。
如何最好地实现这一点?谢谢。
executor = Executors.newFixedThreadPool(numThreads);
while(some_condition==true)
{
//if(executor < 10 tasks pending) <---- how do i do this?
//{
for(int k=0;k<20;k++)
{
Runnable worker = new MyRunnable();
executor.execute(worker);
}
//}
//else
//{
// wait(3000);
//}
}
使用信号量进行更新:
private final Semaphore semaphore = new Semaphore(10)
executor = new ThreadPoolExecutorWithSemaphoreFromJohnExample();
while(some_condition==true)
{
Runnable worker = new MyRunnable();
//So at this point if semaphore is full, then while loop would PAUSE(??) until
//semaphore frees up again.
executor.execute(worker);
}