CHerry | Дата: Суббота, 2011-10-22, 21:42:44 | Сообщение # 1 |
![CHerry](/avatar/97/8071-240618.gif) Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| Поскольку Swing проектируется по однопоточной модели, его API не синхронизирован и следовательно не защищен от попыток другими потоками изменения своих данных. Это значит, что мы может получить опасное столкновение в GUI, если попытается обновить элементы из любого другого потока, а не напрямую из потока событий. Такие действия могут привести к повреждению данных, выбросу исключений и массе других опасных проблем, которые чертовски трудно обнаружить и отладить. Чтобы избежать этой проблемы, всегда следует обновлять GUI из потока событий.
Если мы не можем работать в потоке событий, как наше приложение вообще будет что-то делать? Все просто. Всякий раз, когда мы имеем дело с ситуацией, где мы знаем, что обработка события может занять много времени, выносим его в рабочий поток.
Первое правило использования потоков (threads): если можно, то старайтесь этого избежать. Потоки могут быть сложны в использовании, а также затрудняют отладку программ. Чтобы обезопасить себя от возможности "мертвых" блокировок ("клинчей"), вы должны проявлять исключительную заботу о том, чтобы создаваемые вами потоки не вызывали каких.либо методов компонентов Swing. Помните, что после того, как компонент Swing реализован, обращаться к нему или влиять на него следует только из потока диспетчеризации событий (event-dispatching thread).
статья про потоки и swing
|
|
| |