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()方法的区别的主要内容,如果未能解决你的问题,请参考以下文章

sleep()方法和wait()方法的区别? sleep()方法和yield()方法的区别?

线程中sleep和wait的区别

sleep与 wait区别

sleep和wait有啥区别

java中的sleep和wait的区别

java中的sleep和wait的区别