Java Thread.yield()仍然是一个跨平台雷区?

Java Thread.yield()仍然是一个跨平台雷区?,java,multithreading,Java,Multithreading,我可以找到这样的答案,即Thread.yield()的行为因平台而异。指示这是因为没有实际指定行为 在Java的现代版本中,Thread.yield()行为因平台而异,这种情况仍然存在吗 编辑 我已经看过文档了。我明白这意味着什么。我在询问实际行为。来自Java 8(迄今为止最新的非测试版): 向调度程序发出的提示,表示当前线程愿意使用处理器。调度程序可以随意忽略此提示 收益率是一种启发式尝试,旨在改善 否则会过度使用CPU的线程。它的使用应该是合理的 结合详细的分析和基准测试,以确保 实际上已

我可以找到这样的答案,即
Thread.yield()
的行为因平台而异。指示这是因为没有实际指定行为

在Java的现代版本中,
Thread.yield()
行为因平台而异,这种情况仍然存在吗

编辑

我已经看过文档了。我明白这意味着什么。我在询问实际行为。

来自Java 8(迄今为止最新的非测试版):

向调度程序发出的提示,表示当前线程愿意使用处理器。调度程序可以随意忽略此提示

收益率是一种启发式尝试,旨在改善 否则会过度使用CPU的线程。它的使用应该是合理的 结合详细的分析和基准测试,以确保 实际上已经达到了预期的效果

使用这种方法很少合适。这可能会对你有用 调试或测试目的,可能有助于重现由于 比赛条件。在设计并发性时,它可能也很有用 控件构造,例如java.util.concurrent.locks中的构造 包裹

其影响是:

  • 是的,仍然依赖于平台
  • 是的,启发性的

即使不同平台上的
Thread.yield()
行为的确切细节不同,方法调用基本上还是什么都不做

你调用它,它什么也不做,它以尽可能快的速度返回,模化的事实是它可能结束线程的当前时间片,也可能不结束线程的当前时间片

是“跨平台雷区”吗


如果您编写的代码只有在
Thread.yield()
实际结束调用方的时间片时才能工作,那么您就编写了特定于平台的代码。但是,如果您需要特定于平台的行为,Java可能不应该是您的首选语言。

是的。请参阅“给调度程序的提示,当前线程愿意提供其当前处理器的使用。调度程序可以随意忽略此提示。”我要问的是哪个JVM的实际行为?@SotiriosDelimanolis以上所有内容。如果除了Windows上的JVM之外,其他平台的行为是一致的,那么这就是相关的。信不信由你,并非所有处理器上的所有内核都完全用于应用程序。产量仍然有它的用途。我同意这不是雷区,但它有目的。