1.執行緒間的通訊:多個執行緒處理同乙個資源,但處理的動作卻不同
2.執行緒間的有效通訊:使用等待喚醒機制,實現協調通訊,讓執行緒間進行有規律的執行
3.條件:3.1 wait方法與notify方法必須由同乙個鎖物件呼叫,因為,對應的鎖物件可以通過notify喚醒使用同乙個物件呼叫的wait方法後的執行緒
3.2 wait與notify是屬於object類的方法,因為,鎖可以是任意物件,而任意物件的所屬類,都是繼承object類的
3.3 wait與notify必須要在同步**塊或者同步函式中使用,因為,必須通過鎖物件呼叫這2個方法
4.以吃貨和包子鋪做包子為例子:
執行緒a:包子鋪執行緒
執行緒b:吃貨執行緒
共同資源:包子
規律的執行:如果包子沒有,那麼包子鋪執行緒要被喚醒做包子,吃貨進行無限等待
如果包子有了,那麼吃貨要被喚醒起來吃包子,包子鋪執行緒無限等待
案例如下:
package thread.communication;
/**建立包子類,封裝包子的相關資訊
* @author jeady
* @date 2019/8/1
*/public class baozi
public void setpi(string pi)
public string getxian()
public void setxian(string xian)
public boolean isstatus()
public void setstatus(boolean status)
}
package thread.communication;
/**建立包子鋪執行緒
* @author jeady
* @date 2019/8/1
*/public class baozipu extends thread
@override
public void run() catch (interruptedexception e)
}//注意這裡是不可以用else的,當if條件滿足的時候,我們還要繼續往下執行
//有包子,包子鋪等待,吃貨吃包子
system.out.println(getname()+"包子鋪開始生產包子了");
baozi.pi= "皮薄";
baozi.xian = "肉餡兒";
system.out.println("包子鋪把包子生產好了,改變包子狀態為有,並喚醒吃貨");
baozi.status = true;
baozi.notify();}}
}}
package thread.communication;
/**建立吃貨執行緒
* @author jeady
* @date 2019/8/1
*/public class chihuo extends thread
@override
public void run() catch (interruptedexception e)
}system.out.println(getname()+"開始吃包子"+baozi.pi+baozi.xian);
system.out.println("包子吃完了,改變包子狀態為沒有包子,並喚醒包子鋪生產包子");
baozi.status = false;
baozi.notify();}}
}}
package thread.communication;
/**進行測試
* @author jeady
* @date 2019/8/1
*/public class test01
}
執行結果如下:
執行緒間的通訊
執行緒間的通訊 簡單說明 執行緒間通訊 在1個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊 執行緒間通訊的體現 1個執行緒傳遞資料給另1個執行緒 在1個執行緒中執行完特定任務後,轉到另1個執行緒繼續執行任務 執行緒間通訊常用方法 06 nsthread04 執行緒間通訊 impo...
執行緒間的通訊
常用的 wait notify notifyall 在乙個執行緒裡面,喚醒其他擁有同樣的鎖的執行緒 使用wait notify notifyall 時,塊必須上鎖 author fzz public class communicate catch interruptedexception e sys...
執行緒間的通訊
public class demo1 catch interruptedexception e system.out.println flag is true start new thread catch interruptedexception e system.out.println flag ...