黑马程序员技术交流社区

标题: 多线程sleep()和wait()的区别? [打印本页]

作者: cyc523633157    时间: 2014-8-3 23:24
标题: 多线程sleep()和wait()的区别?
本帖最后由 cyc523633157 于 2014-8-4 22:10 编辑

多线程sleep()和wait()的区别?

作者: 青偆丶易逝〃    时间: 2014-8-3 23:32
线程sleep() 后到了被指定的时间就会自己醒来又获得执行资格去争夺CPU的执行权,而线程wait() 以后,就必须要notify() 或着notifyall()  这两个方法叫醒它, 它才会重新获取执行资格去争夺CPU的执行权。
作者: 于龙超123    时间: 2014-8-3 23:41
楼上讲得很清楚了。
作者: 怀念黑海岸    时间: 2014-8-3 23:42
本帖最后由 怀念黑海岸 于 2014-8-3 23:48 编辑

两者最大的区别在于,执行这两个方法时,对锁放还是留的问题。
线程执行sleep(time)方法时,当场线程是不会丢掉当前获得的锁的,如果你要线程睡一分钟,他会很无耻的捏着锁睡一分钟,其他线程只能眼巴巴的看着不能去抢。
而wait方法就很厚道,一旦执行这个方法,当前线程会交出锁并进入线程池中等待唤醒或者等待规定等待时间完毕,当唤醒或者wait(time)时间到后再重新加入争夺锁的执行权的行列中去。
两个方法都会抛出中断异常。
不好意思 ,刚才想着另外个问题,老是想着cpu结果就打成cpu了。

作者: cyc523633157    时间: 2014-8-3 23:42
青偆丶易逝〃 发表于 2014-8-3 23:32
线程sleep() 后到了被指定的时间就会自己醒来又获得执行资格去争夺CPU的执行权,而线程wait() 以后,就必须 ...

你回答的太棒了。
作者: zxtanshui    时间: 2014-8-3 23:46
青偆丶易逝〃 发表于 2014-8-3 23:32
线程sleep() 后到了被指定的时间就会自己醒来又获得执行资格去争夺CPU的执行权,而线程wait() 以后,就必须 ...

厉害,说的对                             
作者: 止询初衷    时间: 2014-8-3 23:52
这个。。。呵呵
作者: 大★宝    时间: 2014-8-4 09:14
功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩
作者: 诺诺    时间: 2014-8-4 10:42
沙发板凳正解
作者: 张涛的狂怒    时间: 2014-8-4 12:00
嗯嗯嗯,学习下
作者: 楚风★憧憬    时间: 2014-8-4 15:38
sleep();方法在于 第一,必须指定时间参数,第二,线程处于阻塞状态但不放执行权,等待时间到,就会执行,
wait();方法在于,线程处于阻塞状态,释放执行权,当程序运行到notfly();唤醒机制,线程会从阻塞状态转变到就绪状态。
作者: 黑马_java猿    时间: 2014-8-4 16:20
大神都说的很好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2