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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 科篮 于 2014-9-21 22:44 编辑

没法删除没法删除没法删除没法删除没法删除

5 个回复

倒序浏览
sleep()不释放锁
wait()释放锁
这是最本质的区别了

肤浅的说法是:
睡眠了之后,睡眠的线程还霸占着cpu,它威胁cpu“你丫必须等爷睡醒了,服侍完爷再去服侍别的!”然后此线程睡眠,睡醒后它执行完,才会释放锁,才能轮到其他线程执行
等待则比较有素质,不占用cpu,它会告诉cpu“你先忙活其它的去,让我歇一会”,然后它释放锁,解放cpu,让其它线程执行
回复 使用道具 举报
  Wait:释放执行权,释放锁
  Sleep:释放执行权,不释放锁.它不需要被人叫醒
Wait和notify一般是配合使用的,有一个Demo类中有show和method两方法,这两方法中都有同步代码块,使用的是同一个锁,T0,T1和T2在show的同步代码块中等待,当T4在method的同步代码块中唤醒所有notifyAll的线程的时候,这个时候T0,T1,T3他们都会具有cpu的执行资格,但是只有当T4执行完它的代码后,走出同步代码块后,T4释放了锁,这个时候0,1,2会只有一个随即拿到锁,这个时候拿到锁的哥们就同时具有cpu的执行资格和执行权,然后它就能进入同步代码块工作了.
回复 使用道具 举报
sleep(100)到时间了,线程自动活;

wait()用notify唤醒
回复 使用道具 举报
楼上的几位说的很仔细啊
回复 使用道具 举报
sleep()不释放锁
wait()释放锁
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马