Как управлять пулом потоков Java SwingWorker по умолчанию? - PullRequest
3 голосов
/ 03 мая 2010

У меня есть приложение, которое использует 2 длительные задачи SwingWorker, и я только что столкнулся с парой компьютеров Windows с обновленными JVM, которые запускают только одну из них. Не указано никаких ошибок, поэтому я должен предположить, что пул потоков по умолчанию имеет только один поток, и поэтому второй объект SwingWorker попадает в очередь, когда я пытаюсь его выполнить.

Итак, (1) как проверить, сколько потоков доступно в пуле потоков SwingWorker по умолчанию, и (2) как добавить потоки, если мне понадобится больше?

Что-нибудь еще, что я должен знать? Эта кажущаяся ситуация с однопоточным пулом противоречит всем моим ожиданиям.

Я настраиваю ThreadPoolExecutor, но это кажется неправильным ...

Ответы [ 3 ]

2 голосов
/ 24 июня 2010

Возможно, немного поздно, но в более новых версиях Java есть ошибка: SwingWorker блокируется из-за одного потока в свинг-пуле

1 голос
/ 03 мая 2010

Пул потоков SwingWorker по умолчанию на самом деле имеет 10 потоков (определенных в закрытой переменной SwingWorker.MAX_WORKER_THREADS). Если вы видите, что запускается только одна из ваших задач, я бы проверил состояние другого потока с помощью JConsole или другого подобного инструмента.

Нет простого способа связываться с пулом потоков SwingWorker по умолчанию (он является закрытым и не предоставляется ни одним из общедоступных методов). Добавление SwingWorkers в ваш собственный пул потоков - это ожидаемый способ справиться с этим, если пул по умолчанию не работает.

0 голосов
/ 03 мая 2010

В JDK 6 количество рабочих потоков по умолчанию равно 10.

Обычно вам не нужно создавать ThreadPoolExecutor, обычно достаточно пула потоков по умолчанию, используемого работником Swing. Создание ThreadPoolExecutor может быть опасным, поскольку некоторые статические методы создают пул только с одним потоком.

Возможно, вы захотите добавить запись в эти потоки, если она еще не существует, и проверить журналы. Возможно, другая проблема с синхронизацией останавливает вашу вторую фоновую задачу.

...