「每天一道面試題」wait()和sleep()區別?

「每天一道面試題」wait()和sleep()區別?

  1. wait()方法屬於Object,sleep()方法屬於Thread;

  2. wait()方法會主動釋放持有的鎖,而sleep()方法不會釋放持有的鎖;

  3. wait()方法只能在同步方法或同步代碼塊中調用,否則會拋IllegalMonitorStateExeception,sleep()方法沒有這個限制;

引申一下:為什麼wait()方法會主動釋放持有的鎖?

因為如果wait()不釋放持有的鎖,那麼其它線程將不能進入同步方法或同步代碼塊,進而不能調用notify()、notifyAll()方法喚醒線程,產生死鎖!釋放鎖,讓其它線程執行,也可以喚醒自己。


分享到:


相關文章: