u011624903
想和许小言解锁各种姿势
2019-08-29 13:46
采纳率: 52.9%
浏览 306
已采纳

JAVA中Thread.yield方法的一个疑问,求大神帮忙解惑

感谢大神百忙之中抽空看到我的问题,我在想:
当线程A调用yield方法的时候,那么就相当于线程A给其他线程一个机会去让CPU重新选择一个线程执行
那么,我可不可以理解成:
假设我的CUP有N(N>3)个核,并且这N个核都空闲,这个时候我的线程数如果少于N,那么yield方法就没有任何意义,是这么回事儿吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • wojiushiwo945you
    毕小宝 2019-08-29 18:09
    已采纳

    可以这么理解,而且使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。
    如果线程数多于内核数,也不能保证yield()达到让步目的,因为跟优先级有关、它还有可能被线程调度程序再次选中。

    点赞 评论
  • luojianjun2
    Flying_with_you 2019-08-29 14:00

    本身yield方法就不能保证一定能达到让步的效果,就算你线程数大于N,当前线程yield之后还是有可能被选中继续执行,

    点赞 评论
  • yyjjttww
    yyjjttww 2019-08-29 14:00

    线程切换由线程调度器决定,考虑到上下文切换带来的开销,的确没什么意义。

    点赞 评论

相关推荐