Thread.yeild()
让出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资源