Вы, вероятно, ищете ExecutorService
. Получите один, используя Executors.newCachedThreadPool()
- или другие newXXX()
методы, но этот метод должен быть в большинстве случаев приемлемым.
Тем не менее, я считаю, что это то, что вы также можете сделать с SwingWorker
. Просто подготовьте свои данные в обработчике событий до того, как создадите SwingWorker
- вы уже там находитесь на EDT. Если вам нужно инициировать это из потока без EDT, подготовьте данные, используя SwingUtilities.invokeAndWait()
, а затем выделите другой поток, чтобы выполнить запись (или сделайте это в том же потоке без EDT, с которого вы начали).
SwingWorker
и ExecutorService
предоставляют одну и ту же базовую услугу - раскрутить некоторую работу в фоновый поток без явного управления его жизненным циклом. SwingWorker
имеет удобный метод связи с EDT без использования invokeLater()
повсюду, который вам не нужен, и ExecutorService
поддерживает фьючерсы в качестве более общего (без Swing -специфичный) способ общения с асинхронной задачей. В случае использования «забей и забудь», так как у вас обоих все хорошо.