Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Параллелизм в Swing
Событие Диспетчеризирует Поток
Домашняя страница > Создание GUI С JFC/Swing > Параллелизм в Swing

Событие Диспетчеризирует Поток

Код обработки событий Swing работает на специальном потоке, известном, поскольку событие диспетчеризирует поток. Большинство кода, который вызывает методы Swing также, работает на этом потоке. Это необходимо, потому что большинство методов объекта Swing не "ориентировано на многопотоковое исполнение": вызов их от многократных рисков потоков распараллеливает интерференцию или ошибки непротиворечивости памяти. Некоторые компонентные методы Swing маркируются "ориентированными на многопотоковое исполнение" в спецификации API; они могут быть безопасно вызваны от любого потока. Все другие компонентные методы Swing должны быть вызваны от события, диспетчеризируют поток. Программы, которые игнорируют это правило, могут функционировать правильно большую часть времени, но подвергаются непредсказуемым ошибкам, которые трудно воспроизвести.


Примечание по потокобезопасности: может казаться странным, что такая важная часть платформы Java не ориентирована на многопотоковое исполнение. Оказывается, что любая попытка создать ориентированную на многопотоковое исполнение библиотеку GUI обращенным к некоторым основным проблемам. Для больше по этой проблеме, см. следующую запись в блоге Грэма Гамильтона: инструментарии MultiThreaded: отказавшая мечта?

Полезно думать о коде, работающем на событии, диспетчеризируют поток как серию коротких задач. Большинством задач являются вызовы методов обработки событий, такой как ActionListener.actionPerformed. Другие задачи могут быть запланированы кодом программы, используя invokeLater или invokeAndWait. Задачи на событии диспетчеризируют поток, должен закончиться быстро; если они не делают, необработанные события поддерживают, и пользовательский интерфейс становится безразличным.

Если Вы должны определить, работает ли Ваш код на событии, диспетчеризируют поток, вызывают javax.swing.SwingUtilities.isEventDispatchThread.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Начальные Потоки
Следующая страница: Рабочие потоки и SwingWorker