加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如果在同步方法中调用,thread.yield()是否会丢失对象的

发布时间:2020-12-14 16:30:23 所属栏目:Java 来源:网络整理
导读:我明白Thread.currentThread().yield()是通知线程调度程序,它可以将cpu循环分配给同一优先级的其他线程,如果有的话. 我的问题是:如果当前线程已经锁定一些对象并调用yield(),那么它会马上失去该锁吗?当线程调度程序发现没有这样的线程来分配cpu循环时,那么
我明白Thread.currentThread().yield()是通知线程调度程序,它可以将cpu循环分配给同一优先级的其他线程,如果有的话.
我的问题是:如果当前线程已经锁定一些对象并调用yield(),那么它会马上失去该锁吗?当线程调度程序发现没有这样的线程来分配cpu循环时,那么调用了yield()的线程将会再次被锁定在之前丢失的对象上?

我找不到它在javadoc和论坛[http://www.coderanch.com/t/226223/java-programmer-SCJP/certification/does-sleep-yield-release-lock]有50-50个答案.

我认为yield()(让我们说thread1)应该释放锁,因为如果一个同一个优先级的线程(让我们说thread2)要在同一个对象上运行,那么当线程调度器最终将线程分配给thread2时,它可能有机会.

解决方法

Thread.yield()不像Object.wait().它只是放弃控制以允许线程切换.它将对您的程序的并发性没有影响.

不能保证调度程序在收益率之后运行的线程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读