A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cyc523633157 中级黑马   /  2014-8-3 23:24  /  1990 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 cyc523633157 于 2014-8-4 22:10 编辑

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

11 个回复

倒序浏览
线程sleep() 后到了被指定的时间就会自己醒来又获得执行资格去争夺CPU的执行权,而线程wait() 以后,就必须要notify() 或着notifyall()  这两个方法叫醒它, 它才会重新获取执行资格去争夺CPU的执行权。
回复 使用道具 举报
楼上讲得很清楚了。
回复 使用道具 举报
本帖最后由 怀念黑海岸 于 2014-8-3 23:48 编辑

两者最大的区别在于,执行这两个方法时,对锁放还是留的问题。
线程执行sleep(time)方法时,当场线程是不会丢掉当前获得的锁的,如果你要线程睡一分钟,他会很无耻的捏着锁睡一分钟,其他线程只能眼巴巴的看着不能去抢。
而wait方法就很厚道,一旦执行这个方法,当前线程会交出锁并进入线程池中等待唤醒或者等待规定等待时间完毕,当唤醒或者wait(time)时间到后再重新加入争夺锁的执行权的行列中去。
两个方法都会抛出中断异常。
不好意思 ,刚才想着另外个问题,老是想着cpu结果就打成cpu了。
回复 使用道具 举报
青偆丶易逝〃 发表于 2014-8-3 23:32
线程sleep() 后到了被指定的时间就会自己醒来又获得执行资格去争夺CPU的执行权,而线程wait() 以后,就必须 ...

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

厉害,说的对                             
回复 使用道具 举报
这个。。。呵呵
回复 使用道具 举报
功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩
回复 使用道具 举报
沙发板凳正解
回复 使用道具 举报
嗯嗯嗯,学习下
回复 使用道具 举报
sleep();方法在于 第一,必须指定时间参数,第二,线程处于阻塞状态但不放执行权,等待时间到,就会执行,
wait();方法在于,线程处于阻塞状态,释放执行权,当程序运行到notfly();唤醒机制,线程会从阻塞状态转变到就绪状态。
回复 使用道具 举报
大神都说的很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马