6

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

我有以下内容:

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

myTask m 将以 25 为增量从 0 到 100 增加一个进度条。我得到的奇怪行为是前六个线程开始增加,它们在 100 处结束,然后最后六个线程从 0 开始并增加,然后结束。

一个人可能拥有的 Swing Worker 线程的数量是否存在限制因素?

4

3 回答 3

7

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

ACountDownLatch就是为此目的而设计的。这是一个很好的例子,它使用了由闩锁控制的单个SwingWorker和多个辅助线程。

于 2010-08-27T22:22:57.053 回答
2

你的问题说:

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

但是您不能保证所有 Swing 工作线程同时开始并同时结束。

于 2010-08-27T18:45:38.000 回答
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);
于 2010-08-27T18:46:58.543 回答