我有下面的代码片段,运行良好。但问题是它立即创建并将超过 2000 个任务放在执行程序队列中。
我需要检查执行程序队列中已经完成的任务是否完成,然后再给它更多任务。不一定要准确,即如果队列剩余的任务少于 10 个,则再添加 50 个。
所以executor任务队列没有那么多待处理的任务,这样也可以让shutdown()及时工作,否则即使被调用,executor仍然会尝试先完成其队列中的所有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);
}