区别说明
1、wait()是Object的方法,sleep()是Thread的方法。
2、wait()必须采用同步方法,不需要sleep()方法。
3、线程在同步方法中执行sleep()方法,不释放monitor锁,wait()方法释放monitor锁。
短暂休眠后,sleep()方法会主动退出阻塞,而wait()方法需要在没有指定wait时间的情况下被其他线程中断才能退出阻塞。
实例
importjava.text.SimpleDateFormat; importjava.util.Date; publicclassTestSleepAndWait{ publicstaticvoidmain(String[]args){ newThread1().start(); try{ Thread.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); } newThread2().start(); } } classThread1extendsThread{ privatevoidsout(Strings){ System.out.println(s+""+newSimpleDateFormat("HH:mm:ss:SS").format(newDate())); } @Override publicvoidrun(){ sout("enterThread1.run"); synchronized(TestSleepAndWait.class){//wait只能在同步代码块或者同步方法中使用 sout("Thread1isgoingtowait"); try{ TestSleepAndWait.class.wait();//这里只能使用持有锁TestSleepAndWait.class.wait(),使用其他对象则报错java.lang.IllegalMonitorStateException }catch(InterruptedExceptione){ e.printStackTrace(); } sout("afterwaiting,thread1isgoingon"); sout("thread1isover"); } } } classThread2extendsThread{ privatevoidsout(Strings){ System.out.println(s+""+newSimpleDateFormat("HH:mm:ss:SS").format(newDate())); } @Override publicvoidrun(){ sout("enterThread2.run"); synchronized(TestSleepAndWait.class){//wait只能在同步代码块或者同步方法中使用 sout("Thread2isgoingtonotify"); TestSleepAndWait.class.notify();这里只能使用持有锁TestSleepAndWait.class sout("thread2isgoingtosleep10ms"); try{ Thread.sleep(10); }catch(InterruptedExceptione){ e.printStackTrace(); } sout("aftersleeping,thread2isgoingon"); sout("thread2isover"); } } }
以上就是java sleep()和wait()的区别,希望对大家有所帮助。更多Java学习指路:Java基础
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容