2010-03-22 3 views
0

Je viens d'un environnement WinAPI/C++, et je suis curieux de savoir ce que le monde Java utilise à la place d'une boucle de messages threadée dans un thread de travail pour gérer les communications et les interactions entre threads. L'idée est d'utiliser une pompe de message dans le thread de travail, et le thread principal, et de les faire publier des messages dans les deux sens. Cette solution est très centrée sur WinAPI/C++, et probablement pas la méthode préférée pour atteindre cet objectif en Java.Qu'est-ce qui est utilisé à la place de SendMessage et PostMessage dans Java pour gérer les communications inter-thread?

Quelle est la méthode Java pour faire quelque chose comme ça?

Répondre

2

Jetez un coup d'œil au paquetage java.util.concurrent here pour les classes liées à la concurrence. BlockingQueue vous intéresse probablement dans cette situation.

Chaque thread peut avoir une BlockingQueue pour agir comme sa file d'attente de messages d'une manière sûre pour les threads.

+0

+1 Et ma réponse était à moitié écrit quand je recevais le lien pour le package simultané. – Robin

1

En Java, la méthode préférée consiste simplement à accéder aux champs d'un autre thread, avec une synchronisation correcte.

La synchronisation est très importante car c'est le seul moyen de garantir que la valeur écrite par un thread sera vue par les autres (comme spécifié dans le Java Memory Model). Cela peut être réalisé en utilisant le mot-clé synchronized sur les méthodes qui accèdent au champ partagé (verrous obtenus grossièrement, ex: public synchronized void getMyField()), ou en verrouillant explicitement certains verrous plus fins - qui peuvent être soit les verrous tous les objet ont en interne (ex: synchronized (myObject)), ou des verrous spécialisés fournis par le paquet java.util.concurrent (ReadWriteLock, etc.).

Pour la coordination inter-thread, utilisez les Barriers, Queues et toutes les bonnes constructions également disponibles dans le package java.util.concurrent.

Si vous voulez en savoir plus sur tout cela, je vous conseille de lire ce livre: http://www.javaconcurrencyinpractice.com/

Questions connexes