在两个线程之间进行通信

我有一个post, A有一个列表。 List包含一些对象。 现在我想设计一个机制,通过它我可以向线程A发送一些消息。

Thread A在循环中运行(它不等待或hibernate)。 其他一些线程B向线程A发送一些消息,线程A清空所有队列。

如何在线程之间发送消息?

 class A extends Thread { List 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. } } } 

编辑:我可以这样做吗?

 class A extends Thread { List 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 } } } 

您可以拥有消息对象的BlockingQueue 。 其他线程会将消息放入队列。 作为while(true)循环的一部分,线程Apoll队列并处理已到达的任何消息。

在代码中:

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

其他线程现在可以调用queue.put()来向线程A发送消息。

在简单的情况下,您可以向线程A类添加一些实例变量,并让线程B设置其值以指示线程A必须清除其“队列”。 在更高级的情况下,您可以使用线程A和B都可以访问的某些消息队列。 B会在那里发一条消息而A会阅读并采取行动。

在所有情况下,必须正确保护对变量或队列的访问以进行multithreading访问。

您应该能够在类“A”中添加一个方法,该方法可以在代码中的其他位置调用。 只需在可访问的位置保留对“A”类实例的引用。

 class A extends Thread{ List 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 } }