gpt4 book ai didi

java - 两个线程之间的通信

转载 作者:IT老高 更新时间:2023-10-28 20:40:12 26 4
gpt4 key购买 nike

我有一个线程 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com