全国热线

400-080-3312

全国监督服务热线:9:00-23:00

Java线程控制sleep()和wait()有什么区别

sleep()和wait()在java开发中的使用方法和意义是有很大不同的。到底java中sleep()和wait()有什么区别?今天就让南京学码思java培训学校老师来给大家详细讲解一下。

Java线程是开发过程中比较重要的一部分,sleep()和wait()都是用来进行线程控制的,单词意思上看起来差不多,但在java开发中的使用方法和意义是有很大不同的。到底java中sleep()和wait()有什么区别?今天就让南京学码思java培训学校老师来给大家详细讲解一下。

Java线程控制sleep()和wait()有什么区别

1. Java中sleep()和wait()最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩.


在用法上也有所不同


sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;


wait()可以用notify()直接唤起.


2. 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方法才会重新激活调用者,例如:


try{


obj.wait }


catch(InterrputedException e) {


}


3. sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,


wait()是由某个确定的对象来调用的。


sleep和wait的区别有:


1,这两个方法来自不同的类分别是Thread和Object


2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。


3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在


任何地方使用


synchronized(x){


x.notify()


//或者wait()


}


4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常


sleep()、suspend()、resume()方法不推荐使用,推荐使用wait()、notify()、notifyAll()。


1.sleep()方法介绍


sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非


(a)醒来的线程具有更高的优先级。


(b)正在运行的线程因为其它原因而阻塞。


2.wait()方法介绍


wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。当调用wait()后,线程会释放掉它所占有的锁标志,从而使线程所在对象中的其它synchronized数据可被别的线程使用。


3.waite()和notify()的区别


waite()和notify()因为会对对象的“锁标志”进行操作,所以它们必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。


看到这里,相信大家都已经心里有数了。学习java要成体系,但要学好java,还必须要掌握好每个知识点,从细节上学精了,学习才不会出现漏洞,遇到更新更先进的java技术,也能快速掌握。如果你对于java学习还有疑问,或是想获得更多免费java教程和课程资料的话,可以直接咨询学码思在线老师,也欢迎大家前来免费试听学码思java培训课程。


上一篇:java中不同进制是如何表示的
下一篇:如何计算java对象占用内存大小

相关推荐

免费试听 | 学费咨询 | 在线报名 | 申请补贴 | 软件培训 | 网站地图

2016-2020 南京学码思教育科技有限公司 .All Rights Reserved

苏ICP备16033487号 www.njxms.com.cn

全国热线

400-080-3312

全国监督服务热线:9:00-23:00