码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-25 22:01:24      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:bsp   png   load   阻塞   ted   top   and   inter   同步   

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()方法的区别

标签:bsp   png   load   阻塞   ted   top   and   inter   同步   

原文地址:https://www.cnblogs.com/Objecting/p/12233405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!