Java中sleep()与wait()的区别

转载 2013年12月05日 17:30:45

第一种解释:

功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩.  
   
还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.

第二种解释:

sleep是Thread类的静态方法。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行,例如:

try{
System.out.println("I'm going to bed");
Thread.sleep(1000);
System.out.println("I wake up");
}
catch(IntrruptedException e) {
}


wait是Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者,例如:


//Thread 1

try{
obj.wait();//suspend thread until obj.notify() is called
}
catch(InterrputedException e) {
}

第三种解释:

这两者的施加者是有本质区别的.
sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制.

wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",也是 thisOBJ.wait(),这里的暂停是阻塞,还是"点火->烧水->煮饭",thisOBJ就好比一个监督我的人站在我旁边,本来该线程应该执行1后执行2,再执行3,而在2处被那个对象喊暂停,那么我就会一直等在这里而不执行3,但这个流程并没有结束,我一直想去煮饭,但还没被允许, 直到那个对象在某个地方说"通知暂停的线程启动!",也就是thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处继续执行.


其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题

java.lang.Thread类中,提供了sleep(),
java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程
sleep()可以将一个线程睡眠,参数可以指定一个时间。
wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
    wait有两种形式wait()和wait(milliseconds).
sleepwait的区别有:
  1,这两个方法来自不同的类分别是Thread和Object
  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用
   synchronized(x){
      x.notify()
     //或者wait()
   }
   4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

Java中sleep()与wait()区别

学习时正好碰到这两个方法,就查阅相关资料,并通过程序实现,进行区别一下: sleep():正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往...
  • u012050154
  • u012050154
  • 2016年03月16日 11:15
  • 12946

java中sleep与wait的区别

转自:http://blog.csdn.net/shineflowers/article/details/40047479 1.  Java中sleep和wait的区别 ① 这两个方法来自...
  • jxxiongxiaozhi
  • jxxiongxiaozhi
  • 2015年06月15日 18:21
  • 1119

thread中sleep和wait方法的区别,以及lock和synchronized的区别

最近在项目中设计业务请求逻辑这一块,运用到了thread的一些知识,所以就又去特定的研究了一下! 首先 sleep和wait的区别: 1、我们通过查看源码得知,sleep是Threa的静态方法,而...
  • zhuobin_tian
  • zhuobin_tian
  • 2017年05月18日 08:51
  • 588

sleep,wait,delay函数的区别

原型:extern void sleep(unsigned int sec);                 用法:#include     功能:短暂延时     说明:延时s...
  • chenhuijie666
  • chenhuijie666
  • 2012年11月23日 09:03
  • 1561

java 中的sleep()和wait() 等的区别和详解

1、sleep()  使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该...
  • u011974987
  • u011974987
  • 2016年11月08日 22:48
  • 2122

java sleep(),wait(),notify()函数区别

Java中的sleep()和wait()函数都可以挂起当前线程,是当前当前线程不运行,但实现方式不一样。 首先sleep是Thread类的方法静态方法,必须通过Thread类调用。设置时间后,线程进入...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年03月04日 16:39
  • 1417

java 中的 wait()方法和 sleep()方法的区别

sleep()和wait()的区别 Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡。抢占式机制指的是有多个线程处于可运行状态,但是只...
  • liuguangqiang
  • liuguangqiang
  • 2015年10月16日 16:23
  • 8043

Java中的sleep()和wait()的区别

1.对于sleep()方法,是属于Thread类中的。而wait()方法,则是属于Object类中的。 2.最主要是sleep方法没有释放锁,而 wait 方法释放了锁,使得其他线程可以使用同步控制块...
  • nanaMasuda
  • nanaMasuda
  • 2016年08月01日 20:36
  • 813

浅谈sleep方法和wait方法的异同

浅谈sleep方法和wait方法的异同     在我学到多线程技术这里时,感到sleep方法和wait方法二者给我造成了一些困惑,所以我在此将二者小小地总结 一下,希望对大家有所帮助。   ...
  • u013035237
  • u013035237
  • 2015年04月06日 19:52
  • 3099

Java并发:await/wait 与sleep、yield间的区别

(1)是否释放锁:调用sleep和yield的时候不释放当前线程所获得的锁,但是调用await/wait的时候却释放了其获取的锁并阻塞等待。 (2)调用后何时恢复:u  sleep让线程阻塞,且在指定...
  • jiq408694711
  • jiq408694711
  • 2016年04月03日 22:48
  • 5599
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中sleep()与wait()的区别
举报原因:
原因补充:

(最多只允许输入30个字)