java线程礼让yield

java线程礼让yield

1.yield方法

​ 使用Thread类的静态方法yield可以对当前线程进行礼让,yield方法使线程从运行状态转换到就绪状态,

这与sleep方法对比,sleep是使线程从运行状态进入阻塞状态。

现在给出代码便于理解:

public class testyield implements Runnable{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Thread(new testyield(),"test1").start();
		new Thread(new testyield(),"test2").start();
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println(Thread.currentThread().getName()+"->start");
		Thread.yield();    //进行礼让
		System.out.println(Thread.currentThread().getName()+"->end");
	}

}



运行结果如下:
1.
test1->start
test1->end
test2->start
test2->end

2.
test1->start
test2->start
test2->end
test1->end

​ 从结果分析,可以得出线程的礼让不是一定成功的,因为一个线程test1调用yield()方法后从运行态到就绪态后,CPU再通过系统调度调度一个线程进入CPU,这个重新调入的线程也可能是线程test1的情况。所以线程使用yield方法不一定会成功礼让,因为yield方法只是单纯把当前线程从运行态切换为就绪态。最终操作系统通过系统调度,重新调度线程,至于调度哪个线程是操作系统的事。所以才会出现上面情况一。

猜你喜欢

转载自blog.csdn.net/qq_43203949/article/details/105562409