我正在运行一个 for 循环,并且在每次迭代时,我都会在后台执行一个 SwingWorker(持续大约 5 分钟)。 我有一个属性是同时在后台运行的Worker的数量。
for 循环有 100 次迭代,但我只想同时运行 5 个 SwingWorker。如果同时运行的工作线程数量超过 5,如何暂停循环迭代?当它变低时我怎样才能恢复它?
谢谢。
最佳答案
通常我使用具有 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();
}
}
关于Java 在循环期间暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8802692/