天天看點

wait() 和 sleep() 的差別

差別

舉個例子

逍遙和老闆去帶客戶去吃飯,逍遙中途被老闆叫出去(wait 和 sleep 執行),逍遙出去後有兩種再進入房間的方法

  1. 當老闆叫逍遙進去的時候逍遙進去(notify 執行);
  2. 逍遙自己進去(sleep 結束)。

雖然都進去房間了,但是效果是不一樣的。

逍遙自己進去萬一老闆和客戶正在談一些機密的事情,可能逍遙現場就涼了;

但是如果是老闆叫逍遙進去,那麼說明逍遙是可以進去的。

wait 是用于線程之間的通信,而 sleep 是用于線程阻塞的。

唯一的相同點:都是讓線程放棄執行一段時間。

再來看看具體差別

  1. wait 之前需要請求鎖,wait 執行需要先釋放鎖,等待被喚醒後在重新請求鎖;(wait 使用的前提是要有鎖)
  2. sleep 是無視鎖狀态的,即請求之前的鎖不會釋放,沒有鎖也不會請求;
  3. wait 是 Object 方法,sleep 是 Thread 的靜态方法。