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)循环的一部分,线程A将poll队列并处理已到达的任何消息.
在代码中:
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.