java sleep()和wait()的区别

区别说明

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基础

原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容