Я использую качели, и в моем приложении мне нужно было запускать много потоков параллельно, проверяя подключение к интернету через каждые 5 секунд, отслеживая изменения файловой системы, sycing файлы с сервера.Несколько SwingWorkers с ExecuterService не работают должным образом
Все трудоемкие задачи, подобные приведенным выше, работают в SwingWorker
так, чтобы мой графический интерфейс не замерзал.
В то же время мне нужно выполнить некоторые другие трудоемкие задачи, такие как загрузка файла на сервер. для этой цели я также использовал swingWorker. а затем я отправляю всех этих swingworker в executerService для объединения потоков, чтобы они не влияли друг на друга.
Служба моего экстерьера - вот так. Я думал, что для меня будет достаточно 30 потоков.
static ExecutorService threadExecutor;
threadExecutor = Executors.newFixedThreadPool(30);
, а затем я представляю темы в той же службе.
threadExecutor.submit(monitorinternetconnectivity); //submitting swingworker obejct
Некоторые из нитей я представить в начале и некоторые я добавить время выполнения, когда я добавить во время выполнения, он не завершает работу или прервать выполнение своей работы, как контроль доступа к Интернету.
Есть ли способ иметь такую же функциональность, как и рабочий качели, или лучший способ использовать несколько swingworker. и мы должны иметь возможность добавлять новые swingwokers во время выполнения для executer
службы
Я не понимаю, почему вы делегировали выполнение «SwingWorker» в «ExecutorService». «SwingWorker» не будет блокировать текущий поток, так как он будет выполнять всю свою работу в фоновом потоке до тех пор, пока это не будет выполнено. Когда это будет сделано, задача будет выполнена в EDT. – user1329572
'ExecutorService' является неправильным инструментом, если задание является постоянной задачей. Долгосрочная задача нуждается в собственном потоке, и это не выгодно для пула потоков, за исключением того, что в конечном итоге вы ставите задачи, ожидающие очереди, потому что все потоки в пуле заняты выполнением текущих задач. –
Последнее, что я проверил из собственного эксперимента, SwingWorkers использует ограниченный пул потоков из 10 потоков. Я не знаю, является ли это общим правилом, но вам было бы легко написать тестовую программу, чтобы узнать, что вы придумали в своей среде. –