CodeGym /课程 /Java 核心 /yield(放弃优先权)

yield(放弃优先权)

Java 核心
第 7 级 , 课程 7
可用

“你好,阿米戈!今天这堂课简短但有趣。我将向你介绍 Thread 类的 static 方法 yield。”

艾莉已经告诉过你,处理器不断地在线程之间进行切换。每个线程都被分配了一小段处理器时间,称为时间片。当时间到了,处理器将切换到另一个线程并开始执行其命令。调用 Thread.yield() 允许你提前结束当前线程的时间片。换句话说,它告诉处理器切换到下一个线程。

“但是为什么一个线程需要放弃自己的时间而给另一个线程呢?”

“这并不经常发生。调用 yield 意味着“我们的线程提前结束了工作”,yield 之后的命令将以一个完整的时间片开始。因此,它被中断的机会较少。特别是,如果这是一条简短的命令,即执行起来不会花很长时间。这种方法可以用来优化某些流程。”

我还可以告诉你,Thread.sleep(0) 的工作原理实际上是相同的。我认为你一开始不会使用 yield 方法,但是了解它非常有用。

评论 (9)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
z18335776829 级别 19,China,China
12 六月 2023
在Java中,Thread.sleep(0)和Thread.yield()具有不同的语义。 Thread.sleep(0)表示当前线程请求暂停的时间为零,即请求立即释放CPU资源并将执行机会让给其他线程。调用Thread.sleep(0)方法会使得当前线程转为就绪状态,等待系统重新调度并分配时间片,但并不一定能够确保其他线程优先执行。这个方法通常用于临时放弃CPU资源,以便其他高优先级线程有更多执行机会。 Thread.yield()方法与Thread.sleep(0)类似,也是请求将CPU执行时间让给其他线程。但是,Thread.yield()方法不保证当前线程会立即停止执行,也不保证其他线程会立即开始执行。这个方法主要用于调试和测试目的,可以尝试减少某些并发问题的发生,但是不应该在实际应用中过于频繁地调用该方法。 总的来说,Thread.sleep(0)和Thread.yield()都是线程的协作机制,用来减少并发问题的发生。但是,它们的语义和效果都是不同的。Thread.sleep(0)是请求立即暂停线程,让出CPU时间片给其他线程执行,而Thread.yield()是尝试建议JVM让出当前线程的CPU时间片,让其他线程有更多执行机会。
只想好冷啊 级别 20,China,China
22 一月 2024
says good
hello world 级别 22,shanghai,China
15 十一月 2021
Thread.sleep(0) :触发操作系统重新进行一次CPU竞争。
hello world 级别 22,shanghai,China
15 十一月 2021
调用Thread.yield()允许你提前结束当前线程的时间片
kqhasaki 级别 23,Daxi,Taiwan, Province of China
18 八月 2021
要没有暗物质了,兄弟
周文超 级别 20,Fairfield,China
17 三月 2021
hhhhh 太过分了 骗我暗物质
John Squirrels 级别 41,San Francisco,Poland
18 三月 2021
You can earn DV by solving the tasks.
Tom 级别 41,San Jose,Sweden
18 二月 2021
這個太故意了啦,單純要吃你的暗物質,逼你回去把題目解完😀
Kisora Leo 级别 20
13 三月 2021
我到现在还有500+暗物质呢