在两个线程之间进行通信

aks*_*hay 23 java multithreading communicate

我有一个帖子,A里面有一个列表.List包含一些对象.现在我想设计一个mechanisim,通过它我可以向线程发送一些消息A.

Thread A循环运行(它不等待或睡眠).其他一些线程,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.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我可以这样做吗?

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 36

你可以有一个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
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

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