2012-01-10 139 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

池大小的一種方式什麼