多线程 Thread.yield 方法到底有什么用?

  • 时间:
  • 浏览:0

亲们儿知道 start() 依据是启动线程池池 ,让线程池池 变成就绪情况表等待歌曲 CPU 调度后执行。

肯能给小蜜加了最高优先权,栈长加了最低优先权,即使栈长先启动,那小蜜还是有很大的概率比栈长先会输出完的,亲们儿可太大到试一下。

那 yield() 依据是干什么用的呢?来看下源码。

结果1:栈长让出了 CPU 资源,小蜜成功上位。

本文作者: 栈长

/**

 * A hint to the scheduler that the current thread is willing to yield

 * its current use of a processor. The scheduler is free to ignore this

 * hint.

 *

 * <p> Yield is a heuristic attempt to improve relative progression

 * between threads that would otherwise over-utilise a CPU. Its use

 * should be combined with detailed profiling and benchmarking to

 * ensure that it actually has the desired effect.

 *

 * <p> It is rarely appropriate to use this method. It may be useful

 * for debugging or testing purposes, where it may help to reproduce

 * bugs due to race conditions. It may also be useful when designing

 * concurrency control constructs such as the ones in the

 * {@link java.util.concurrent.locks} package.

 */

public static native void yield();

yield 即 "谦让",也是 Thread 类的依据。它让掉当前线程池池 CPU 的时间片,使正在运行中的线程池池 重新变成就绪情况表,并重新竞争 CPU 的调度权。它肯能会获取到,全部都是肯能被其他线程池池 获取到。

本文来自云栖社区媒体媒体合作伙伴“Java技术栈”,了解相关信息可太大到关注“Java技术栈”。

下面是另一个使用示例。

原文发布时间为:2018-11-20

yield 依据可太大到很好的控制多线程池池 ,如执行某项复杂化的任务时,肯能担心占用资源太大,可太大到在完成某个重要的工作后使用 yield 依据让掉当前 CPU 的调度权,等下次获取到再继续执行,原先不但能完成买车人的重要工作,也能给其他线程池池 其他运行的肯能,处理另一个线程池 长时间占有 CPU 资源。

1)yield, sleep 都能暂停当前线程池池 ,sleep 可太大到指定具体休眠的时间,而 yield 则依赖 CPU 的时间片划分。

结果2:栈长让出了 CPU 资源,栈长继续运行。

你你这个示例每当执行完 20 个刚刚本来出 CPU,每次谦让后就会马上获取到调度权继续执行。

3)yield 不到被中断,而 sleep 则可太大到接受中断。

而肯能亲们儿把另一个线程池 加带线程池池 优先级,那输出的结果又不一样。

运行以上多线程池池 ,可太大到有以下四种 生活结果。

栈长没用过 yield,感觉没什么鸟用。

2)yield, sleep 另一个在暂停过程中,如肯能持有锁,则全部都是会释放锁资源。

肯能一定要用它得话,得话解释假如: