2012-01-10 141 views
2

我正在运行一个for循环,并且在每次迭代中,我在后台执行一个SwingWorker(大约持续5分钟)。 我有一个属性是谁在同一时间在后台运行的工人数。Java在循环中暂停

for循环有100次迭代,但我只想运行5个simulutaneous SwingWorker。如果同时工作的人数超过5,我该如何暂停循环迭代?当它变得更低时我该如何恢复它?

谢谢。

回答

2

通常我用5个线程的ExecutionService做到这一点。但是你可以像这样使用信号量。

final Semaphore permits = new Semaphore(5); 
for(int i=0;i<100;i++) { 
    permits.acquire(); 
    // add a task 
} 



// in the SwingWorker 
public String doInBackground() { 
    try { 
     return findTheMeaningOfLife(); 
    } finally { 
     permits.release(); 
    } 
} 
0

假设的循环不会做其他不是执行你的SwingWorkers,要做到这一点是刚刚提交100个任务到ThreadPoolExecutor的设置为5

池大小的一种方式什么