「每天一道面试题」wait()和sleep()区别?

「每天一道面试题」wait()和sleep()区别?

  1. wait()方法属于Object,sleep()方法属于Thread;

  2. wait()方法会主动释放持有的锁,而sleep()方法不会释放持有的锁;

  3. wait()方法只能在同步方法或同步代码块中调用,否则会抛IllegalMonitorStateExeception,sleep()方法没有这个限制;

引申一下:为什么wait()方法会主动释放持有的锁?

因为如果wait()不释放持有的锁,那么其它线程将不能进入同步方法或同步代码块,进而不能调用notify()、notifyAll()方法唤醒线程,产生死锁!释放锁,让其它线程执行,也可以唤醒自己。


分享到:


相關文章: