【问题标题】:Whether Thread.yield() will be useful for good Coding practice? [duplicate]Thread.yield() 是否对良好的编码实践有用? [复制]
【发布时间】:2015-06-28 16:07:11
【问题描述】:

Thread.yield() 是否保证 Thread 会一直等待直到其他 Thread 执行?

【问题讨论】:

  • 你的问题是什么?
  • 文档回答了这个问题:Thread#yield()
  • @SpringLearner,我同意这是一个非常薄弱的​​问题,但我不认为他在问Thread.yield() 是否与Thread.sleep(0) 相同。我回答的问题是,“为什么 Thread.yield() 存在?我应该什么时候调用它?”看起来我的答案是 OP 想听到的。

标签: java multithreading


【解决方案1】:

Thread.yield() 是大约三十年前的遗物,当时线程是在没有操作系统支持的单 CPU 计算机上通过一种称为“协作多任务”的技术实现的。

在那些日子里,线程曾经运行的唯一方法是当某个其他线程通过调用线程库中的某个函数“让出”CPU 时。通常这会发生在一个线程需要等待某事的时候,因此自然而然,这是让其他线程运行的好时机。

yield() 调用是针对线程进行长时间计算并且它不想等待任何东西的特殊情况。程序员会在算法的关键位置添加一些 yield() 调用,以确保其他线程能够及时响应事件。

让我再说一遍,因为它很重要:线程会在它确实不想想要等待的地方调用 yield()。

从那以后,某种形式的 yield() 几乎在每个线程库中都存在,但它不再有任何用途,除非您重新实现最低级别的同步原语作为学习练习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多