為什麼wait 一定要放在迴圈中

2021-09-28 22:52:49 字數 518 閱讀 1540

在多執行緒的程式設計實踐中,wait()的使用方法如下:

synchronized (monitor) 

// 處理其他的業務邏輯

}

那為什麼非要while判斷,而不採用if判斷呢?如下:

synchronized (monitor) 

// 處理其他的業務邏輯

}

這是因為,如果採用if判斷,當執行緒從wait中喚醒時,那麼將直接執行處理其他業務邏輯的**,但這時候可能出現另外一種可能,條件謂詞已經不滿足處理業務邏輯的條件了(即locked = false),這時應該繼續迴圈檢測locked,從而再次呼叫wait,而不是繼續向下執行,於是有必要進行再一次判斷,如下:

synchronized (monitor)  else 

}}​```

而迴圈則是對上述寫法的簡化,喚醒後再次進入while條件判斷,避免條件謂詞發生改變而繼續處理業務邏輯的錯誤。

併發 十一 為什麼wait 一定要放在迴圈中

在多執行緒的程式設計實踐中,wait 的使用方法如下 synchronized monitor 處理其他的業務邏輯 那為什麼非要while判斷,而不採用if判斷呢?如下 synchronized monitor 處理其他的業務邏輯 這是因為,如果採用if判斷,當執行緒從wait中喚醒時,那麼將直接執...

併發 十一 為什麼wait 一定要放在迴圈中

在多執行緒的程式設計實踐中,wait 的使用方法如下 synchronized monitor 處理其他的業務邏輯 那為什麼非要while判斷,而不採用if判斷呢?如下 synchronized monitor 處理其他的業務邏輯 這是因為,如果採用if判斷,當執行緒從wait中喚醒時,那麼將直接執...

Docker 為什麼一定要sudo

這個sudo真是煩死人了,每次都要sudosudo,覺得浪費了我大量的時間。但是,當我學習到如何到如何可以不sudo 為什麼要sudo之後,還是覺得sudo好一些吧,於是最後選擇加乙個環境變數,來節約時間。參考文章中給出了幾個非常高水平的處理辦法,我很喜歡,以後來學。1.如何免sudo實現docke...