[英]Communicating between two threads
我有一個帖子, 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.
}
}
}
編輯:我可以這樣做嗎?
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)
循環的一部分,線程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
}
}
}
其他線程現在可以調用queue.put()
來向線程A
發送消息。
您應該能夠在類“A”中添加一個方法,該方法可以在代碼中的其他位置調用。 只需在可訪問的位置保留對“A”類實例的引用。
class A extends Thread{
List<Object> 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
}
}
在一個簡單的情況下,您可以向線程A類添加一些實例變量,並讓線程B設置其值以指示線程A必須清除其“隊列”。 在更高級的情況下,您可以使用線程A和B都可以訪問的某些消息隊列。 B會在那里發一條消息而A會閱讀並采取行動。
在所有情況下,必須正確保護對變量或隊列的訪問以進行多線程訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.