您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java中的sleep和wait的区别
Java中的sleep()和wait()的区别广州疯狂软件学院拥有三大课程体系包括:Java课程,Android课程,iOS课程,疯狂软件年终钜惠,报名Java就业班,免费赠送基础班,名额有限,本月火热报名中,期待你的咨询。对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。什么意思呢?举个列子说明:1/**2*3*/4packagecom.b510.test;56/**7*java中的sleep()和wait()的区别8*@authorHongten9*@date2013-12-1010*/11publicclassTestD{1213publicstaticvoidmain(String[]args){14newThread(newThread1()).start();15try{16Thread.sleep(5000);17}catch(Exceptione){18e.printStackTrace();19}20newThread(newThread2()).start();21}2223privatestaticclassThread1implementsRunnable{24@Override25publicvoidrun(){26synchronized(TestD.class){27System.out.println(enterthread1...);28System.out.println(thread1iswaiting...);29try{30//调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池31TestD.class.wait();32}catch(Exceptione){33e.printStackTrace();34}35System.out.println(thread1isgoingon....);36System.out.println(thread1isover!!!);37}38}39}4041privatestaticclassThread2implementsRunnable{42@Override43publicvoidrun(){44synchronized(TestD.class){45System.out.println(enterthread2....);46System.out.println(thread2issleep....);47//只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。48TestD.class.notify();49//==================50//区别51//如果我们把代码:TestD.class.notify();给注释掉,即TestD.class调用了wait()方法,但是没有调用notify()52//方法,则线程永远处于挂起状态。53try{54//sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,55//但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。56//在调用sleep()方法的过程中,线程不会释放对象锁。57Thread.sleep(5000);58}catch(Exceptione){59e.printStackTrace();60}61System.out.println(thread2isgoingon....);62System.out.println(thread2isover!!!);63}64}65}66}运行效果:enterthread1...thread1iswaiting...enterthread2....thread2issleep....thread2isgoingon....thread2isover!!!thread1isgoingon....thread1isover!!!如果注释掉代码:1TestD.class.notify();运行效果:enterthread1...thread1iswaiting...enterthread2....thread2issleep....thread2isgoingon....thread2isover!!!且程序一直处于挂起状态。疯狂软件Java培训、iOS培训新年钜惠,报名Java就业班免费赠送Java基础班,报名iOS就业班免费赠送iOS基础班,本月火速抢座中,为回报广大新老学员,值此新年之际推出报读就业班赠送基础班的活动。(疯狂软件学院咨询QQ:544627560电话:020-28309378QQ:707552864)-----------------------------------2014年初活动--------------------------------------疯狂软件Java学习班方向:1.报读JavaEE就业班赠送基础班课程。2.开班一次性(一个月内)交清JavaEE就业班学费,赠送基础班全套课程。疯狂软件iOS学习班方向:1.报读iOS应用+手游就业班赠送iOS基础班课程。2.开班一次性(一个月内)交清iOS应用+手游就业班就业班学费,赠送基础班全套课程。
本文标题:Java中的sleep和wait的区别
链接地址:https://www.777doc.com/doc-2880633 .html