标签:ldd jdk public 产生 静态 com 相对 出现 java编程思想
yield表示让步、放弃的意思。
Yield是一种启发式尝试,用于改善线程之间的相对进展,否则会过度利用CPU。 它的使用应与详细的分析和基准测试相结合,以确保它实际上具有所需的效果。
使用此方法很少合适。 它可能对调试或测试目的很有用,它可能有助于重现因竞争条件而产生的错误。 在设计并发控制结构(例如java.util.concurrent.locks
包中的结构)时,它也可能很有用。
class YieldThread implements Runnable { public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "-" + i); if (i == 3) { Thread.yield(); } } } } public class YieldDemo { public static void main(String[] args) { YieldThread yThield = new YieldThread(); new Thread(yThield,"A").start(); new Thread(yThield,"B").start(); } }
通过对比使用Thread.yield()方法和未使用的运行结果,可以发现使用yield()方法后,很大概率上出现让出CPU给其它线程执行的情况。
1 class YieldThread implements Runnable { 2 public void run() { 3 for (int i = 0; i < 5; i++) { 4 System.out.println(Thread.currentThread().getName() + "-" + i); 5 if (i == 3) { 6 Thread.yield(); 7 } 8 } 9 } 10 } 11 public class YieldDemo { 12 public static void main(String[] args) { 13 YieldThread yThield = new YieldThread(); 14 Thread t1 = new Thread(yThield,"t1"); 15 Thread t2 = new Thread(yThield,"t2"); 16 t1.setPriority(1); 17 t2.setPriority(10); 18 System.out.println("t1.getPriority()"+t1.getPriority()); 19 System.out.println("t2.getPriority()"+t2.getPriority()); 20 t1.start(); 21 t2.start(); 22 } 23 }
根据运行情况得出结论:
实际运行中发现,Thread.yield()方法并不是仅仅选择让步于同等或者更高优先级的线程。高优先级的线程也会让步与低优先级的线程。因此高优先级仅仅是线程获得的CPU时间片更多一些,相对执行到的机会更大,并不是一定先执行。
标签:ldd jdk public 产生 静态 com 相对 出现 java编程思想
原文地址:https://www.cnblogs.com/zhanghuaze/p/13332667.html