java中的sleep()和wait()的区别

1. sleep()方法:是属于Thread类中的。

  wait()方法:是属于Object类中的;两者都会造成线程的阻塞(让出cpu使用权)

2. sleep()方法是在指定的时间让当前线程暂停执行,让出cpu该其他线程,但是他的状态依然保持(就是执行到了哪行代码就在哪行停留着,等到超时或者调用interrupt()来终止),当指定的时间到了又会自动恢复运行状态,从阻塞状态变为就绪状态

 wait()是无限制等待,即当前线程永久暂停,直到其他线程调用 该对象notify()或 notifyAll()才能解除这种状态,不过由于它是在同步上下文中的,所以还要拿到同步锁才能从阻塞状态变为就绪状态,运行状态时还是从原有wait()下一行开始执行(为wait感到悲哀)

3. sleep()不会释放对象锁(也意味在同步方法或同步块使用sleep方法,其他线程无法执行同步上下文的内容)

  wait()方法会放弃对象锁

4. sleep()可以在任意地方使用

  wait()只能在同步上下文中使用(同步块或同步方法)

PS:wait(),notify(),notifyAll()这三兄弟只能在同步上下文中使用。

5. sleep是静态方法,作用于当前的执行的线程

 wait是实例方法,作用于当前的执行的线程(这一点很多人都说作用当前对象,我认为是错的,正确应该是当前的执行的线程会进入到等待持当中)

原文地址:https://www.cnblogs.com/ibcdwx/p/13730255.html