Что используется вместо SendMessage и PostMessage в Java для обработки связи между потоками? - PullRequest
0 голосов
/ 22 марта 2010

Я из среды WinAPI / C ++, и мне любопытно, что мир Java использует вместо многопоточного цикла сообщений в рабочем потоке для обработки связей и взаимодействий между потоками.Идея состоит в том, чтобы использовать насос сообщений как в рабочем потоке, так и в основном потоке, и заставлять их публиковать сообщения туда и обратно.Это решение очень ориентировано на WinAPI / C ++ и, вероятно, не является предпочтительным методом достижения этой цели в Java.

Что такое способ "Java" сделать что-то подобное?

Ответы [ 3 ]

2 голосов
/ 22 марта 2010

Посмотрите на пакет java.util.concurrent здесь для полезных классов, связанных с параллелизмом. BlockingQueue, вероятно, наиболее интересен для вас в этой ситуации.

Каждый поток может иметь BlockingQueue, чтобы действовать в качестве очереди сообщений безопасным для потока способом.

1 голос
/ 22 марта 2010

В Java предпочтительным способом является простой доступ к полям из одного потока в другой с правильной синхронизацией.

Синхронизация очень важна, поскольку это единственный способ гарантировать, что значение, записанное одним потоком, будет видно другим (как указано в модели памяти Java). Это может быть достигнуто с помощью ключевого слова synchronized в методах, которые обращаются к общему полю (грубые блокировки, например: public synchronized void getMyField ()), или путем явной блокировки на некоторые более тонкие блокировки - которые могут быть либо блокировками каждый объект имеет внутреннюю (например, синхронизированную (myObject)) или специализированные блокировки, предоставляемые пакетом java.util.concurrent (ReadWriteLock и т. д.).

Для координации между потоками используйте барьеры, очереди и все приятные конструкции, также доступные в пакете java.util.concurrent.

Если вы хотите узнать больше обо всем этом, я предлагаю вам прочитать эту книгу: http://www.javaconcurrencyinpractice.com/

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