sleep()和wait()方法的区别
Posted objecting
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sleep()和wait()方法的区别相关的知识,希望对你有一定的参考价值。
1,sleep()声明在Thread类中,而且是静态方法;
wait()声明在Object类中,而且必须由锁对象调用。
2,sleep()时间达到后恢复;
wait()可以设置事件自动恢复,如果没有设置时间必须由notfiy来唤醒;
3,sleep()不会使得这个线程失去锁;
wait()会使得当前这个线程失去锁,让其他线程执行同步代码块或同步方法。
java.lang.Object类的方式:
(1)wait():等待
(2)notify()/notifyAll():唤醒
它们都必须由“锁/对象监视器”来调用,否则就会报错。
1、新建:创建了线程对象,还未start
2、就绪:已启动,并且可被CPU调度
3、运行:正在被调度
4、阻塞:遇到了:sleep(),wait(),wait(time),其它线程的join(),join(time),suspend(),锁被其他线程占用等
解除阻塞回到就绪状态:sleep()时间,notify(),wait的时间到,加塞的线程结束,加塞的时间到,resume(),其他占用锁的线程释放了锁等。
5、死亡:run()正常结束,遇到了未处理的异常或错误,stop()
1、新建NEW:创建了线程对象,还未start
2、可运行RUNNABLE:可以被CPU调度,或者正在被调度
3、阻塞BLOCKED:等待锁
4、等待WAITING:wait(),join()等没有设置时间的,必须等notify(),或加塞的线程结束才能恢复
5、有时间等待TIMED_WAITING:sleep(time),wait(time),join(time)等有时间的阻塞,等时间到了恢复,或被interrupt也会恢复
6、终止TERMINATED:run()正常结束,遇到了未处理的异常或错误,stop()
线程死亡,wait()会释放锁
sleep()和yield()不会释放锁
以上是关于sleep()和wait()方法的区别的主要内容,如果未能解决你的问题,请参考以下文章