yield()让当前正在运行的线程回到就绪状态,以允许具有相同优先级的其他线程获得运行的机会。因此,使用yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。
使用yield方法时要注意的几点:
yield是一个静态的方法。
调用yield后,yield告诉当前线程把运行机会交给具有相同优先级的线程。
yield不能保证,当前线程迅速从运行状态切换到就绪状态。
yield只能是将当前线程从运行状态转换到就绪状态,而不能是等待或者阻塞状态。
public class TestyieldThread implements Runnable {
@Override
public void run(){
for(int i=0;i<30;i++){
if("Thread-0".equals(Thread.currentThread().getName())){
if(i == 0){
Thread.yield();
}
}
System.out.println(Thread.currentThread().getName()+ " " +i);
}
}
public static void main(String[] args){
Thread t1 = new Thread(new TestyieldThread());
Thread t2 = new Thread(new TestyieldThread());
t1.start();
t2.start();
}
}