似乎当我实例化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.我发现前六个线程开始递增的异常行为,它们以100结束,然后最后六个线程从0开始递增,并完成。
是否存在一个可能有Swing Worker线程数量的限制因素?
答案 0 :(得分:7)
我正在寻找的行为是所有12个线程同时开始工作&amp;同时完成。
CountDownLatch
是为此目的而设计的。这是一个很好的example使用单个SwingWorker
和一些由锁存器控制的辅助线程。
答案 1 :(得分:3)
你的问题是:
我正在寻找的行为都是12 线程同时开始工作 &安培;同时完成。
但是你无法保证所有Swing工作线程同时开始并同时结束。
答案 2 :(得分:2)
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<Runnable>(),
threadFactory);