【Java】sleep和wait区别总结

原创 2018年04月17日 13:06:17

来源:https://blog.csdn.net/zlfprogram/article/details/77257373


一、来源类: 

  • sleep是Thread类的静态方法; 
  • wait是Object的方法,可以对任意一个对象调用wait方法

二、使用范围: 

  • sleep可以在任何地方使用,必须捕获异常; 
  • wait只能在同步控制方法或者同步控制块里面使用,不需要捕获异常

三、锁: 

  • sleep不释放锁,不出让锁资源,但会让出CPU资源; 
  • wait释放了锁,进入线程等待池等待,出让系统资源(锁资源和CPU资源)

线程的资源有不少,但应该包含CPU资源和锁资源这两类。

   (1)sleep(long mills):让出CPU资源,但是不会释放锁资源。

   (2)wait():让出CPU资源和锁资源。

    锁是用来线程同步的,sleep(long mills)虽然让出了CPU,但是不会让出锁,其他线程可以利用CPU时间片了,但如果其他线程要获取sleep(long mills)拥有的锁才能执行,则会因为无法获取锁而不能执行,继续等待。

    但是那些没有和sleep(long mills)竞争锁的线程,一旦得到CPU时间片即可运行了。


四、唤醒: 

  • sleep(ms) 将一个线程睡眠并指定时间自动醒,如果时间不到可以调用interreput()来强行打断; 
  • wait() 将一个线程挂起,直到超时或者该线程被唤醒。

五、施加者是有本质区别 

  • 两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题
  • sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比说,我要做的事情是 “点火->烧水->煮面”,而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制.
  • 而wait(),首先这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说”暂停!”,也是 thisOBJ.wait(),这里的暂停是阻塞,还是”点火->烧水->煮饭”,thisOBJ就好比一个监督我的人站在我旁边,本来该线程应该执行1后执行2,再执行3,而在2处被那个对象喊暂停,那么我就会一直等在这里而不执行3,但正个流程并没有结束,我一直想去煮饭,但还没被允许, 直到那个对象在某个地方说”通知暂停的线程启动!”,也就是thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处继续执行.


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love_Aym/article/details/79973261

Java中sleep()与wait()区别

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

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

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

JAVA—sleep()和wait()的区别

JAVA—sleep()和wait()的区别 sleep()和wait()的区别 Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运...
  • clam_clam
  • clam_clam
  • 2011-09-23 13:45:16
  • 20646

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

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

Java sleep和wait的区别

sleep() 方法 wait() 方法 sleep()使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2018-04-05 10:44:18
  • 21

深入理解<em>Wait</em>、Notify<em>和Wait</em>与<em>sleep区别</em>

wait和notify的理解与使用 <em>Java</em> wait() notify()方法使用实例讲解 wait、<em>sleep</em>、notify、notifyAll<em>的区别</em> 深入理解Wait、Notify<em>和Wait</em>与<em>sleep区别</em> 立即下载 上传...
  • 2018年04月16日 00:00

java中wait和sleep的区别

通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕。如果图片还没有下载完,d...
  • TQUDING
  • TQUDING
  • 2013-03-08 15:21:57
  • 5092

Java中sleep Wait yield Suspend的区别

三者都可以使得当前的线程退出执行状态,但是有些使得当前线程进入阻塞状态,有的却不会 Sleep     线程进入阻塞状态,不能得到CPU执行时间,只有等待时间够长之后才会使线程重新进入可执行...
  • icezmb
  • icezmb
  • 2015-03-10 10:19:16
  • 610

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

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

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

sleep()和wait()的区别 Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡。抢占式机制指的是有多个线程处于可运行状态,但是只...
  • liuguangqiang
  • liuguangqiang
  • 2015-10-16 16:23:38
  • 9037
收藏助手
不良信息举报
您举报文章:【Java】sleep和wait区别总结
举报原因:
原因补充:

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