ExecutorService vs Swing Timer - PullRequest
       17

ExecutorService vs Swing Timer

4 голосов
/ 06 января 2009

Я недавно читал Грязные клиенты и заметил, что, хотя версия Java - 6, в Concurrent Framework нет никаких упоминаний. Так, они говорят о java.util.Timer и javax.swing.Timer, но не об ExecutorService.

Я прочитал о преимуществах ExecutorService в вопросе " Java Timer против ExecutorService " и решил использовать последний по сравнению с первым. Но в книге рассказывается о javax.swing.Timer и его преимуществах специфичности для разработки Swing.

Итак, означает ли это, что для разработки Swing (анимация кнопок и т. Д.) Javax.swing.Timer по-прежнему является лучшим выбором или в новой Concurrent Framework есть соответствующий класс, который заменяет его?

Ответы [ 3 ]

6 голосов
/ 06 января 2009

Ну, по крайней мере, Swing Timer работает на EDT, так что вам не нужно все оборачивать вызовами invokeLater. Он также хорошо связан с Swing, так как использует Actions, ActionListeners и другие связанные с Swing классы.

Я бы придерживался Swing Timer для задач, связанных с Swing, и использовал бы новый параллельный пакет для вещей, которые не связаны с обновлением графического интерфейса.

Взгляните на Использование таймеров в приложениях Swing , поскольку оно может содержать больше информации для отклонения (извините) решения.

5 голосов
/ 06 января 2009

Я бы сказал, что для простых вещей, связанных со свингом, лучшим выбором будет javax.swing.Timer из-за указанных здесь преимуществ .

Обратите внимание, что задача таймера Swing выполняется в событии отправки нить. Это означает, что задача может безопасно манипулировать компонентами, но это также означает, что задача должна выполнить быстро.

С другой стороны, если вам нужно выполнить не связанные с колебанием или более сложные / длительные операции обработки, ExecutorService очень надежен и определенно подходит.

1 голос
/ 06 января 2009

Просто предложение, детализирующее то, что посоветовал bruno, один из примеров использования превосходных утилит параллелизма Java 1.5+ без нарушения Swing - заставить ваш ExecutorService выполнять всю тяжелую работу (как сказал bruno), но как только это будет сделано поток ExecutorService должен передать взаимодействие с фактическими компонентами пользовательского интерфейса потоку AWT в Runnable с использованием одного из:

  • javax.swing.SwingUtilities.invokeAndWait(Runnable doRun)
  • javax.swing.SwingUtilities.invokeLater(Runnable doRun)

Эти методы передают runnable для выполнения потоком AWT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...