java執行緒的等待和喚醒

2021-09-05 11:13:14 字數 1366 閱讀 3520

注意:

使用wait()和notify()結合,主線程啟動子子執行緒後,進入等待狀態,等待子執行緒喚醒

/**

* 主線程:測試執行緒和喚醒

*/public static void main(string arg) catch (interruptedexception e)

long endtime = system.currenttimemillis();

log.info(">>>>>主線程繼續執行");}}

/**

* 子執行緒:測試執行緒和喚醒

*/public void run()】開始執行,延時1s",name);

try catch (interruptedexception e)

//如果把業務**塊也整合到同步代塊內,會導致該子執行緒會一直占用lock鎖,

//導致主線程無法獲取lock的物件鎖,所以主線程設定lock.wait(2000)5s超時會無效,實際會等到子執行緒執行結束主線程才會被喚醒

synchronized (lock)

}

結果如圖所示:主線程等到子執行緒結束喚醒後才繼續執行剩餘的流程

使用wait()和notify()結合,主線程啟動子子執行緒後,進入等待狀態,等待子執行緒喚醒

2.使用wait(long timeout)和notify()結合,主線程等待最長時間不超過5s的時間,超過則自動喚醒,**如下

/**

* 主線程:測試執行緒和喚醒

*/public static void main(string arg) catch (interruptedexception e)

long endtime = system.currenttimemillis();

log.info(">>>>>主線程繼續執行");}}

/**

* 子執行緒:測試執行緒和喚醒

*/public void run()】開始執行,延時1s",name);

try catch (interruptedexception e)

//如果把業務**塊也整合到同步代塊內,會導致該子執行緒會一直占用lock鎖,

//導致主線程無法獲取lock的物件鎖,所以主線程設定lock.wait(2000)5s超時會無效,實際會等到子執行緒執行結束主線程才會被喚醒

synchronized (lock)

}

結果如圖所示:

java 多執行緒 等待喚醒機制

package thread執行緒 生產者消費者問題 問題1 為什麼要用while而不用if進行判斷 因為是多執行緒在操作同一資源,即有多個生產者也有多個消費者,如果用if進行判斷的話會出現生產者生產連續生產多次,而消費者只消費 消費一次,或生產者生產一次消費者消費多次的錯誤資訊,這是為什麼呢?原因...

java多執行緒等待喚醒機制

等待喚醒機制 object類中提供了三個方法 wait 等待 notify 喚醒單個執行緒 notifyall 喚醒所有執行緒 為什麼這些方法不定義在thread類而定義在object類中呢?這些方法的呼叫必須通過鎖物件呼叫,而我們使用的鎖物件是任意鎖物件。所以,這些方法必須定義在object類中。...

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

等待喚醒機制 涉及方法 1 wait 讓執行緒處於凍結狀態,被wait的執行緒會儲存到執行緒池中 2 notify 喚醒執行緒池中任一線程 隨機 3 nitifyall 喚醒執行緒池中所有執行緒 這些方法必須定義在同步中,因為這些方法是用於操作執行緒狀態的方法,必須要明確操作的是哪個鎖上的執行緒 這...