让出CPU资源,使线程从运行状态变为就绪状态,和其他线程回到同一起跑线,让CPU重新选择,还有可能会被再一次选中。
实例:
package com.zw; public class ThreadTest { public static void main(String[] args) { ThreadOne threadOne = new ThreadOne(); ThreadOne threadTwo = new ThreadOne(); Thread thread = new Thread(threadOne); Thread thread1 = new Thread(threadTwo); thread.start(); thread1.start(); } } class ThreadOne implements Runnable { @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if(i == 30) { Thread.yield(); System.out.println(Thread.currentThread().getName() + " 暂停 " + i); } } } }
Thread-0 0 Thread-1 0 Thread-0 1 Thread-1 1 Thread-1 2 Thread-0 2 Thread-0 3 Thread-0 4 Thread-0 5 Thread-0 6 Thread-0 7 Thread-0 8 Thread-0 9 Thread-0 10 Thread-0 11 Thread-0 12 Thread-0 13 Thread-0 14 Thread-0 15 Thread-0 16 Thread-0 17 Thread-1 3 Thread-0 18 Thread-1 4 Thread-1 5 Thread-1 6 Thread-0 19 Thread-1 7 Thread-0 20 Thread-1 8 Thread-0 21 Thread-1 9 Thread-0 22 Thread-1 10 Thread-0 23 Thread-1 11 Thread-0 24 Thread-1 12 Thread-0 25 Thread-1 13 Thread-0 26 Thread-1 14 Thread-0 27 Thread-1 15 Thread-0 28 Thread-1 16 Thread-0 29 Thread-1 17 Thread-0 30 Thread-1 18 Thread-0 暂停 30 Thread-1 19 Thread-0 31 Thread-1 20 Thread-0 32 Thread-1 21 Thread-0 33 Thread-1 22 Thread-0 34 Thread-1 23 Thread-0 35 Thread-1 24 Thread-0 36 Thread-1 25 Thread-0 37 Thread-1 26 Thread-0 38 Thread-1 27 Thread-0 39 Thread-1 28 Thread-0 40 Thread-0 41 Thread-0 42 Thread-0 43 Thread-0 44 Thread-0 45 Thread-0 46 Thread-0 47 Thread-0 48 Thread-0 49 Thread-1 29 Thread-1 30 Thread-1 暂停 30 Thread-1 31 Thread-1 32 Thread-1 33 Thread-1 34 Thread-1 35 Thread-1 36 Thread-1 37 Thread-1 38 Thread-1 39 Thread-1 40 Thread-1 41 Thread-1 42 Thread-1 43 Thread-1 44 Thread-1 45 Thread-1 46 Thread-1 47 Thread-1 48 Thread-1 49
从上面输出结果可以看出共分为两种情况:
1、线程0从运行状态变为就绪状态,线程1拿到CPU资源
2、线程1从运行状态变为就绪状态,紧跟着线程1又拿到了CPU资源