Swing Worker线程不并发

时间:2010-08-27 18:43:06

标签: java swing swingworker

似乎当我实例化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线程数量的限制因素?

3 个答案:

答案 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);