您的位置 首页 java

说说:java中sleep、yield、join、wait方法的区别

sleep ()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不会释放“锁标志”,也就是说如果有 synchronized 同步块,其他线程仍然不能访问共享数据。 作用于线程

· Thread .sleep()方法用来暂停线程的执行,将CPU放给线程调度器。

· Thread.sleep()方法是一个 静态方法 ,它暂停的是当前执行的线程。

· java 有两种sleep方法,一个只有一个毫秒参数,另一个有毫秒和 纳秒 两个参数。

· 与wait方法不同,sleep方法不会释放锁

· 如果其他的线程中断了一个休眠的线程,sleep方法会抛出Interrupted Exception。

· 休眠的线程在唤醒之后不保证能获取到CPU,它会先进入就绪态,与其他线程竞争CPU。

· 有一个易错的地方,当调用t.sleep()的时候,会暂停线程t。这是不对的,因为Thread.sleep是一个静态方法,它会使当前线程而不是线程t进入休眠状态。

yield (): 它仅仅释放线程所占有的CPU资源,从而让其他线程有机会运行,但是并不能保证某个特定的线程能够获得CPU资源。谁能获得CPU完全取决于调度器,在有些情况下调用yield方法的线程甚至会再次得到CPU资源。所以,依赖于yield方法是不可靠的,它只能尽力而为。 作用于线程

join (): 当前线程等待调用此方法的线程执行结束再继续执行。如:在main方法中调用t.join(),那main方法在此时进入阻塞状态,一直等t线程执行完,main方法再恢复到就绪状态,准备继续执行。

join方法必须在线程start方法调用之后调用才有意义。这个也很容易理解:如果一个线程都没有start,那它也就无法同步了。 作用于线程

实现原理

说说:java中sleep、yield、join、wait方法的区别

wait ():

· wait只能在同步(synchronize)环境中被调用,而sleep不需要。

· 进入wait状态的线程能够被notify和notifyAll线程唤醒,但是进入sleeping状态的线程不能被notify方法唤醒。

· wait通常有条件地执行,线程会一直处于wait状态,直到某个条件变为真。但是sleep仅仅让你的线程进入睡眠状态。

· wait方法在进入wait状态的时候 会释放对象的锁 ,但是sleep方法不会。

wait方法是针对一个被 同步代码块 加锁的对象

说说:java中sleep、yield、join、wait方法的区别


《Java多线程面试题》

出版单位:北京尚学堂优效学院

著:张洋

优效学院_张洋老师

11年工作经验 曾就职联众游戏(程序员)、众信旅游(Team Leader)、精智教育(联合创始人)、中国石化(大数据高级顾问) 精通 javaEE 体系、互联网产品架构,熟悉Sap Bw/HANA、多个大数据项目经验。

20180926版


本文章为连载内容,大家可以持续关注小编,我将尽其所能的为大家提供技术性实践资料、文章、视频。

感谢大家的支持!

文章来源:智云一二三科技

文章标题:说说:java中sleep、yield、join、wait方法的区别

文章地址:https://www.zhihuclub.com/188799.shtml

关于作者: 智云科技

热门文章

评论已关闭

1条评论

  1. Hi , I do believe this is an excellent blog. I stumbled upon it on Yahoo , i will come back once again. Money and freedom is the best way to change, may you be rich and help other people.

网站地图