Вопрос синхронизации Java - PullRequest
       30

Вопрос синхронизации Java

0 голосов
/ 01 августа 2011

Просто ищу подтверждение чего-то:

У меня есть объект сервера с графическим интерфейсом Swing, содержащий метод handle(), к которому обращаются внешние потоки, и другой метод doThis(), который запускается из графического интерфейса объекта сервера.

Я понимаю, что обработка событий Swing происходит в потоке диспетчеризации событий, поэтому на самом деле поток диспетчеризации событий осуществляет доступ к doThis().

Существует вероятность, что doThis() и handle() приведут к помехам. Чтобы избежать этого, я должен синхронизировать оба метода, верно? Это предотвратит поток диспетчеризации событий и другие внешние потоки от вызова одного метода до завершения другого.

Верны ли мои рассуждения?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Вместо этого используйте SwingWorker;TwoRoot - простой пример.Поместите handle() в фоновом режиме и doThis() в process().

0 голосов
/ 01 августа 2011

С учебник Java по синхронизации :

синхронизация этих методов имеет два эффекта: во-первых, два вызова синхронизированных методов на одном и том же объекте невозможны длячередовать.Когда один поток выполняет синхронизированный метод для объекта, все другие потоки, которые вызывают синхронизированные методы для того же блока объекта (приостанавливают выполнение), пока первый поток не завершится с объектом.Во-вторых, при выходе из синхронизированного метода он автоматически устанавливает отношение «до и после» с любым последующим вызовом синхронизированного метода для того же объекта.Это гарантирует, что изменения состояния объекта видны всем потокам.

Так что да.

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