黑马程序员技术交流社区

标题: 多线程的问题 [打印本页]

作者: 徐-星星    时间: 2012-10-1 21:07
标题: 多线程的问题
多线程中有两个用于延迟的函数
sleep() 和 wait() 看了视频 我把所有代码的wait()方法和sleep()都给调用了
基本都能用 ,既然这样为什么还要两个方法
请高手为我回答一下 它们有啥区别呢
那种情况下可以用wait(),那种情况下可以用sleep()

作者: 严海荣    时间: 2012-10-1 21:15
wait()需要notify()唤醒,而sleep()是睡眠时间到了就自己醒了。
而当在一个Synchronized方法中调用sleep()时,线程虽然休眠了,但是对象的机锁没有被释放,其他线程仍然无法访问这个对象。
而wait()方法则会在线程休眠的同时释放掉机锁,其他线程可以访问该对象.
所以用到同步的时候,根据需求使用不同的方法。
作者: 何小红    时间: 2012-10-1 21:28
wait()和sleep()的区别
1,sleep()必须指定时间,如果没有指定,必须用notify唤醒。而wait()可以指定时间,也可以不用指定时间。
2,wait()方法必须定义在同步中,sleep方法不一定
3,在同步中wait() sleep()对于执行权和锁的处理不同。
sleep()释放cpu执行权,但是没有释放锁
wait()释放执行权,释放锁

作者: 邱成    时间: 2012-10-1 23:16
sleep和wait的区别有:
  1,这两个方法来自不同的类分别是Thread和Object
   2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用   
         synchronized(x){      
                           x.notify()     //或者wait()   
              }   
   4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常




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