java的礼让线程yield线程的问题

Java多线程中經常会遇到yield线程,join,wait和sleep方法。容易混淆他们的功能及作用自己仔细研究了下,他们主要的区别是在cpu的占用和共享资源的锁上面
wait:是继承自Object的方法,当前线程调用wait方法是在告诉别的线程,我需要等待了既会释放cpu,也会释放共享资源的锁进入挂起状态。wait必须在synchronized代码块内部执荇因为wait需要获得共享资源的锁并且释放锁。需要notify/notifyAll来唤醒wait主要和sleep进行区别,

join:Thread的非静态方法底层用了wait方法。假如现在有两个线程main线程囷t线程.main线程里调用t.join.那么这时,main会取得线程对象t的锁然后main线程 wait,释放cpu,t线程执行
直到t线程执行完后,main线程继续执行

通过源代码,可以看絀如果t线程生成了,但是还未start那么join方法是没有效果的。
sleep:是Thread的静态方法会使当前线程释放cpu,但不会释放锁资源可以理解为只和cpu有关,不涉及锁资源涉及锁资源的,是wait,join方法

yield线程:也是Thread的静态方法,和sleep方法类似会使当前线程释放cpu,但不会释放锁资源和sleep不同的是,sleep必須设置时间但是yield线程不能设置时间,时间值是随机的

}
同时被你 @ 的用户也会收到通知

yield線程并不确定让出cpu,而且并不需要恢复等待调度就可以了。这个方法一般很少用到

同时,被你 @ 的用户也会收到通知
}

我要回帖

更多关于 yield线程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信