14 4 執行緒的通訊

2021-07-12 03:15:24 字數 725 閱讀 6185

執行緒通訊:乙個執行緒完成自己的任務時,就要通知另外乙個執行緒去

例子就是生產者與消費者關係

wait():等待。如果執行緒執行了wait方法,那麼該執行緒會進入等待的狀態

notify():喚醒等待的執行緒

注意:1、wait和notify方法是屬於objeck類的。

2、wait和notify方法必須是要找同步**塊或者同步函式中才能使用。

3、wait和notify方法必須要鎖物件呼叫。

class product extends thread

class producers extends product

public void run()

else

i++;

p.flag = true;

system.out.println("生產者生產了"+p.name+"**為="+p.price);

p.notify();//生產完就喚醒消費

}else//有產品就等待消費

catch (interruptedexception e) } }

} }}class consumers extends product

public void run()

else

catch (interruptedexception e) }}

} }}public class wu

}

144 多執行緒 執行緒間通訊 等待喚醒機制

class res class input implements runnable public void run catch exception e if x 0 else x x 1 2 r.flag true r.notify class output implements runnable ...

執行緒的通訊

為什麼這些操作執行緒的方法要定義在object類中呢?因為這些方法在操作同步中線程時,都必須要標識他們所操作執行緒持有的鎖,只有同乙個鎖上的被等待執行緒,可以被同乙個鎖上的notify喚醒 不可以對不同鎖中的執行緒進行喚醒 也就是說,等待和喚醒必須是同乙個鎖 而鎖可以是任意物件,所以可以被任意物件呼...

執行緒的通訊

鎖機制 包括互斥鎖 條件變數 讀寫鎖和自旋鎖 互斥鎖 當鎖被占用時試圖對其加鎖的執行緒都進入阻塞狀態,當鎖釋放時哪個等待執行緒能獲得該鎖取決於核心的排程。確保同一時間只能有乙個執行緒訪問共享資源 條件變數 以原子的方式阻塞程序,直到某個特定條件為真為止。條件變數始終與互斥鎖一起使用。讀寫鎖 以寫模式...