gpt4 book ai didi

java - yield() 和 sleep() 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:35 24 4
gpt4 key购买 nike

我知道一个区别:

如果我们说 thread.sleep(1000),该线程肯定会 hibernate 1000 毫秒,而使用 yield()没有这样的保证。这对于线程调度很有用,因为调用 yield() 的线程很可能会立即再次被选中运行。

还有什么?

最佳答案

线程.sleep()

  1. 当前线程将状态从Running更改为Waiting/Blocked,如下图所示。
  2. 引用当前 sleep 线程(比如 t)的任何其他线程都可以调用 t.interrupt() 中断它
    • 必须封装对 sleep 的调用以捕获 InterruptedException 的已检查异常
  3. 在线程设置为 hibernate 的时间段之后,它进入可运行状态并且可能不会立即运行!它必须等待线程调度程序为其时间片安排它。

线程.yield()

  1. 调用它可能会导致线程调度程序将当前线程Running 状态移动到Runnable 状态并执行另一个相同优先级的线程可运行状态。仅当在 Runnable 状态下有其他具有相同优先级的线程时,才会发生这种状态转换。因此,不保证线程将停止执行,因为另一个相同优先级线程的条件可能不满足。
  2. .yield() 很大程度上基于线程优先级概念。 (所有线程都分配有优先级,当优先级较高的线程处于 Runnable 状态时,它通常会根据 ThreadScheduler 的实现抢占/停止执行较低优先级的线程。)

enter image description here注意:

  • Thread.sleep()Thread.yield() 都是静态函数,会影响正在执行它的当前线程。
  • 这两个函数都不会释放它们持有的同步锁。

关于java - yield() 和 sleep() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com