41 sleep() 和 wait() 有什么区别?

sleep() 和 wait() 有什么区别?

答:

sleep()和wait()都是线程暂停执行的方法。

同步锁的对待不同:(最大区别)

  • sleep()度后,程序并不会不释放同步锁。

  • wait()后,程序会释放同步锁。 使得其他线程可以使用同步控制块或者方法。

用法的不同:

  • sleep()可以用时间指定来使他自动醒过来。如果时间不到你只能调用interreput()来强行打断。

  • wait()可以用notify()直接唤起。

  • wait,notify,notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用.

属于不同的类属:

  • sleep()的类是Thread。

  • wait()的类是Object。


 

原文链接: https://www.jianshu.com/p/70d7674fd861 (图片)
原文链接: https://www.baidu.com/link?url=yljOJF92CmGGKwSunaRBMYWBvC2W58JjrtQbgOfV0uf2_Po0c1gavL5VR72fo_zs3Cpp-vjorJ1z2SMX74_zKq&wd=&eqid=e0b89b950004e132000000065eab4bfb (同步锁+代码示例)
原文链接: http://www.360doc.com/content/14/0829/16/15257968_405629320.shtml (拓展资料)

拓展:

  • sleep是Thread类的静态方法。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行,例如:
try{
System.out.println("I'm going to bed");
Thread.sleep(1000);
System.out.println("I wake up");
}
catch(IntrruptedException e) {
}
  • wait是Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者,例如:
//Thread 1

try{
obj.wait();//suspend thread until obj.notify() is called
}
catch(InterrputedException e) {
}

其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题

  • 在java.lang.Thread类中,提供了sleep(),

  • 而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程

  • wait有两种形式wait()和wait(milliseconds).

wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

   synchronized(x){
      x.notify()
     //或者wait()
   }
  • sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

猜你喜欢

转载自www.cnblogs.com/ynzj123/p/12812429.html
今日推荐