導語:多執行緒間通訊就是多個執行緒在操作同一資源,但是操作的動作不同,下面讓我們瞭解一下吧!
多執行緒通訊方法
(1)為什麼要通訊
多執行緒併發執行的時候, 如果需要指定執行緒等待或者喚醒指定執行緒, 那麼就需要通訊.比如生產者消費者的問題,
生產一個消費一個,生產的時候需要負責消費的程序等待,生產一個後完成後需要喚醒負責消費的執行緒,
同時讓自己處於等待,消費的時候負責消費的執行緒被喚醒,消費完生產的產品後又將等待的生產執行緒喚醒,
然後使自己執行緒處於等待。這樣來回通訊,以達到生產一個消費一個的目的`。
(2)怎麼通訊
在同步程式碼塊中, 使用鎖物件的wait()方法可以讓當前執行緒等待, 直到有其他執行緒喚醒為止.
使用鎖物件的notify()方法可以喚醒一個等待的執行緒,或者notifyAll喚醒所有等待的執行緒.
多執行緒間通訊用sleep很難實現,睡眠時間很難把握。
停止執行緒的方法:
stop方法已經過時,如何停止執行緒?
停止執行緒的方法只有一種,就是run方法結束。如何讓run方法結束呢?
開啟多執行緒執行,執行程式碼通常是迴圈體,只要控制住迴圈,就可以讓run方法結束,也就是結束執行緒。
特殊情況:當執行緒屬於凍結狀態,就不會讀取迴圈控制標記,則執行緒就不會結束。
為解決該特殊情況,可引入Thread類中的Interrupt方法結束執行緒的凍結狀態;
當沒有指定的方式讓凍結執行緒恢復到執行狀態時,需要對凍結進行清除,強制讓執行緒恢復到執行狀態