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不需要捕获异常