黑马程序员技术交流社区
标题:
请教sleep() 和 wait() 有什么具体区别?
[打印本页]
作者:
Kevin123
时间:
2012-12-10 15:34
标题:
请教sleep() 和 wait() 有什么具体区别?
本帖最后由 白良锦 于 2012-12-13 13:54 编辑
看基础视频多线程时老师讲到过sleep 和wait,请问
sleep()
和
wait()应用中
有什么具体区别
?
作者:
高会仁
时间:
2012-12-10 15:49
本帖最后由 高会仁 于 2012-12-10 15:52 编辑
1、这两个方法来自不同的类,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法,谁调用的谁去睡觉
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
作者:
super_Xiong
时间:
2012-12-10 15:57
sleep()是让线程暂定一下,在指定的时间后自动开启,
wait()暂停后需要用notify()方法唤醒,否则不继续
作者:
快乐之恋
时间:
2012-12-10 16:31
区别一:
sleep是Thread类的方法,是线程用来 控制自身流程的,比如有一个要报时的线程,每一秒中打印出一个时间,那么我就需要在print方法前面加上一个sleep让自己每隔一秒执行一次。就像个闹钟一样。
wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。
区别二 :
关于锁的释放 ,在这里假设大家已经知道了锁的概念及其意义。调用sleep方法不会释放锁(自己的感觉是sleep方法本来就是和锁没有关系的,因为他是一个线程用于管理自己的方法,不涉及线程通信)
区别三:
使用区域
由于wait函数的特殊意义,所以他是应该放在同步语句块中的,这样才有意义 。
注意:两个方法都需要抛出异常
作者:
焦健
时间:
2012-12-10 20:51
sleep()可以传入一个时间参数,可以控制时间,wait()无法控制睡眠时间,只能使用notify()进行唤醒。
作者:
小洋人最happy
时间:
2012-12-10 21:00
简单说一下,我觉得挺好理解的。
wait():可以加时间也可以不加时间,释放执行权,也释放锁
sleep():必须加时间,释放执行权,但是不释放锁
明白吗?
作者:
孙辉辉
时间:
2012-12-12 11:48
sleep()睡眠一段时间后自动醒来
而wait()则是等待,直到有线程通知(notify())唤醒他才会重新工作
举个很简单的例子:
sleep:好比你睡觉,睡到第二天早上闹钟响后你起床继续一天的形成,只和时间有关系。
wait()则是你越好和朋友在哪集合然后一起玩,到了约定的时间你到达而你朋友没有到达,那么你就要等到你朋友到来(notify()唤醒),虽然你们约定的时间已经到了
作者:
Kevin123
时间:
2012-12-12 19:02
高会仁 发表于 2012-12-10 15:49
1、这两个方法来自不同的类,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法, ...
明白了,谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2