Я читаю Потоки Java 3-е изд.Оукс и Вонг (O'Reilly 2004).Они несут пример игры в Swing на протяжении всей книги.Классы, которые они определяют, в основном являются пользовательскими подклассами javax.swing.JComponent
.
. Что мне кажется совершенно неправильным, так это то, что они делают эти JComponent
потокобезопасными с различными методами синхронизации.У меня сложилось впечатление, что компоненты Swing не должны быть потокобезопасными, а скорее, что к ним всегда нужно обращаться из потока диспетчеризации событий Swing.(Забавно, один из немногих случаев, когда они модифицируют компонент через Swing EDT, это для setText
, который является одним из очень немногих методов Swing, которые не нужно вызывать из EDT.)
Я хотел бы знать от некоторых из вас, кто имеет большой опыт написания / чтения кода Swing: часто ли программисты синхронизируют компоненты Swing вместо того, чтобы всегда модифицировать их через EDT?Это терпимо?
РЕДАКТИРОВАТЬ:
Я заметил, что это почти такой же вопрос, как этот поток .Однако это не говорит о том, что программисты на самом деле делают в дикой природе.Я озадачен тем, что книга О'Рейли так грубо нарушает модель потоков Swing.
РЕДАКТИРОВАТЬ:
Я обнаружил, что они кратко объясняют где-то в середине книгимодель Swing Threading.Тем не менее, я хотел бы получить ответ на мой вопрос.У меня такое чувство, что большинство, кто читает эту книгу, в конечном итоге нарушат модель потоков Swing, поскольку большинство их примеров делают это.
РЕДАКТИРОВАТЬ:
Если вы хотите посмотреть на код,Вы можете Скачать примеры кода в виде zip-файла.См., Например, ch03 / example1 / AnimatedCharacterDisplayCanvas.
РЕДАКТИРОВАТЬ:
Я только что узнал, что setText
не будет поточно-ориентированным в Java7 (выпуск в июле 2011 года).