【发布时间】:2012-07-19 20:30:40
【问题描述】:
我有下面的代码 sn-p,它运行良好。但问题是它立即创建并将超过 2000 个任务放在执行程序队列中。
我需要检查已经在执行器队列中的任务是否完成,然后再给它更多任务。不一定要准确,即如果队列剩余
所以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);
}
【问题讨论】:
标签: java multithreading executorservice