yield函数概念:
当调用Thread.yield() 函数时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示。
public class YieldDemo { public static void main(String[] args) { Runnable yieldTask = new Runnable() { @Override public void run() { for(int i = 1; i <= 10; i++){ System.out.println(Thread.currentThread().getName() + i) ; if(i == 5){ Thread.yield(); } } } }; Thread t1= new Thread(yieldTask,"A"); Thread t2 = new Thread(yieldTask,"B"); t1.start(); t2.start(); } }
打印结果:
A1 A2 A3 A4 A5 A6 A7 A8 A9 B1 A10 B2 B3 B4 B5 B6 B7 B8 B9 B10
可以发现A5后面是A6,并没有让出CPU
再执行一次
A1 B1 A2 A3 A4 A5 B2 A6 A7 A8 A9 A10 B3 B4 B5 B6 B7 B8 B9 B10
可以发现A5后面是B2,交出了CPU执行