java multithreading communicate

java - Comunicando entre dos hilos



multithreading communicate (3)

Tengo un hilo, A que tiene una lista. Lista contiene algunos objetos. Ahora quiero diseñar un mecanismo por el cual pueda enviar un mensaje a la secuencia A

Thread A ejecuta en un bucle (no espera ni duerme). Algún otro hilo, B , envía algún mensaje al hilo A y el hilo A vacía todas sus colas.

¿Cómo puedo enviar mensajes entre hilos?

class A extends Thread { List<Object> objs = something; //Init it void run() { while(true) { //Body which works on objects. //After receiving an external message, "A" should perform some action, for example, empty objects. } } }

EDITAR: ¿Puedo hacerlo así?

class A extends Thread { List<Object> objs = something; //Init it Boolean flag = false; public void setFlag(boolean value) { synchronized(flag) { this.flag = value; } } public void getFlag() { synchronized(flag) { return this.flag; } } void run() { while(true) { //Body which works on objects. //After receiving an external message, A should perform some action, for example, empty objects. if (getFlag == true) //Empty list } } }


Debería poder agregar un método a la clase "A" que pueda llamarse en cualquier parte de su código. Simplemente mantenga la referencia a su instancia de clase "A" en un lugar accesible.

class A extends Thread{ List<Object> objs = something ;//init it void run(){ while(true){ //body which works on objs //open receiving external message A should perform some action ie empty objs } } void ChangeState() { //clear objs } }


En un caso simplista, puede agregar alguna variable de instancia a la clase A del hilo y hacer que el hilo B establezca su valor para indicar que el hilo A debe borrar sus colas. En un caso más avanzado, puede utilizar una cola de mensajes a la que pueden acceder ambos subprocesos A y B. B colocaría un mensaje allí y A leería y actuaría sobre él.

En todos los casos, el acceso a la variable o la cola debe estar debidamente protegido para el acceso de múltiples subprocesos.


Podrías tener un BlockingQueue de objetos de mensaje. Otros hilos pondrían mensajes en la cola. Como parte del bucle while(true) , el hilo A poll la cola y procesaría cualquier mensaje que haya llegado.

En codigo:

class A extends Thread{ List<Object> objs = something ;//init it BlockingQueue<Message> queue = new LinkedBlockingQueue<Message>(); void run(){ while(true){ Message msg; while ((msg = queue.poll()) != null) { // process msg } // do other stuff } } }

Otros subprocesos ahora pueden llamar a queue.put() para enviar mensajes al subproceso A