循环期间Java暂停

时间:2012-01-10 11:40:03

标签: java loops swingworker

我正在运行for循环,在每次迭代中,我在后台执行一个SwingWorker(持续约5分钟)。 我有一个属性,它是同时在后台运行的Worker的数量。

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

谢谢。

3 个答案:

答案 0 :(得分: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();
     }
 }

答案 1 :(得分:1)

查看以下有关SwingWorker限制和监控的博客。它解释了如何定义M个并发线程来执行N个任务。

基本上你必须创建一个线程池并让它来管理你的工人的执行。

http://blogs.oracle.com/swinger/entry/swingworker_throttling_and_monitoring

答案 2 :(得分:0)

假设for循环除了执行SwingWorkers之外没有做任何其他事情,一种方法是只向TCPPoolExecutor提交100个任务,并将池大小设置为5。