執行緒之間如何通訊?
1、設定乙個標誌變數,寫乙個死迴圈輪訓該標誌變數。(由於這種方式不推薦,這裡不詳細說明)
2、使用 等待/通知機制(wait/notify)來實現。(重點)
這種方式實現需要使用到wait()、notify()、notifyall()方法,它們都屬於object裡的方法。
wait()方法的作用:讓當前執行**的執行緒進入等待狀態。該方法被呼叫後,當前執行緒會釋放該物件所擁有的鎖,停止剩餘操作,當接到notify通知時,才繼續執行後面的操作,否則一直處於等待狀態。
notify()/notifyall()方法的作用:通知那些等待獲取該物件鎖的執行緒,它們可以獲取該物件鎖了。該方法被呼叫後,並不會立刻就釋放所擁有的鎖,而是執行完剩餘操作之後,才會釋放鎖。
以上幾個方法在呼叫之前,必須獲取該物件的物件級別鎖,否則會報異常。即:只能在同步**塊或者同步方法裡使用。
小例子:要求共有兩個執行緒,第乙個執行緒輸出「開始出發了...」和「已經到了火星...」這兩句,第二個執行緒輸出中間的語句,通過等待/通知機制實現如下效果?
/** * @author 陳嘉豪
*/public class mythread1 extends thread
@override
public void run() catch (interruptedexception e)
system.out.println("已經到了火星...");}}
}
package com.cjh;
/** * @author 陳嘉豪
*/public class mythread2 extends thread
@override
public void run() catch (interruptedexception e) }}
}}
package com.cjh.test;
import com.cjh.mythread1;
import com.cjh.mythread2;
public class threadtest
}
執行測試類,即可得到效果。到此你有沒有對執行緒通訊思想有個大概的了解了呢?o(∩_∩)o~ 執行緒間通訊
執行緒間通訊 多個執行緒在操作統一資源,但各個執行緒操作的動作不同。資源 class res class input implements runnable public void run else x x 1 2 class output implements runnable public vo...
執行緒間通訊
執行緒間的通訊 在乙個多執行緒的應用程式中,所有執行緒共享程序資源,協同工作。所以,執行緒之間的通訊是編寫多執行緒 應用的必不可少的環節。執行緒之間的通訊包括互斥 同步等,它是多 執行緒設計中最難控制的部分,也是關鍵部分。執行緒間的互斥 1 臨界區 在乙個多執行緒 的應用程式中,可能存在這樣的危險 ...
執行緒間通訊
執行緒間通訊 其實就是多個執行緒在操作同乙個資源 但是操作的動作不同。等待喚醒機制 wait notify 0 notifyall 都使用在同步中,因為要對持有監視器 鎖 的執行緒操作。所以要使用在同步中,因為只有同步才具有鎖 為什麼這些操作執行緒的方法要定義object類中呢?因為這些方法在操作同...