java - 两个线程之间的通信

标签 java multithreading communicate

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

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

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

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.
        }
    }
}

编辑: 我可以这样吗?

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
        }
    }
}

最佳答案

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

在代码中:

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
     }
   }
}

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

关于java - 两个线程之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916398/

相关文章:

java - 在Map中减少两次迭代

java - 同一线程能够在同一对象上执行两个同步方法

multithreading - 检查冷熔线程

java - 什么以及如何将 Java Swing 概念与云相关?

python 2.7 - 子进程控制与 mpg123 的交互

Java文件读取和字符串分割问题

java - 在 Java 8 中生成具有无限循环的线程的最佳方法是什么?

java - 将 SoapUI 插件与 Jenkins 集成

java - urlFetch、Servlet 和线程

python - python-uno 如何用管道操作 libreoffice-calc?