Swing Worker线程不并发

似乎当我实例化12个Swing Worker线程时,前六个开始完成它的任务,它完成AND然后最后六个开始并完成。 我正在寻找的行为是所有12个线程同时开始工作并同时完成。

我有以下内容:

for (int i = 0; i < 12; i++ ) { myTask m = new Mytask(i, START); m.execute(); } 

myTask m将以0到100递增一个进度条,增量为25.我发现前六个线程开始递增的exception行为,它们以100结束,然后最后六个线程从0开始递增,然后结束。

是否存在可能具有的Swing Worker线程数量的限制因素?

我正在寻找的行为是所有12个线程同时开始工作并同时完成。

CountDownLatch就是为此目的而设计的。 这是使用单个SwingWorker和由锁存器控制的许多辅助线程的一个很好的示例 。

你的问题是:

我正在寻找的行为是所有12个线程同时开始工作并同时完成。

但是你无法保证所有Swing工作线程同时启动并同时结束。

SwingWorker类有一个静态ExecutorService字段,MAX_WORKER_THREADS = 10.我不确定你为什么看到6而不是10.但你不能超过10。

  /** * number of worker threads. */ private static final int MAX_WORKER_THREADS = 10; 

  executorService = new ThreadPoolExecutor(1, MAX_WORKER_THREADS, 10L, TimeUnit.MINUTES, new LinkedBlockingQueue(), threadFactory);