线程的礼让(Thread.yield())方法

在多线程里面有各种各样的方法,其中有一个礼让的方法很有意思,现实生活中所谓的礼让,就是“委屈自己方便他人”!比如过马路,汽车礼让行人,当然这是在国外,国内过个斑马线是要看司机的性格的!那么在线程中是个什么情况呢,下面看一下demo

 

public class yeld {

	public static void main(String[] args) {
		ThreadDemo demo = new ThreadDemo();
		Thread thread = new Thread(demo, "花花");
		Thread thread1 = new Thread(demo, "草草");
		thread.start();
		thread1.start();
	}
}

class ThreadDemo implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 5; i++) {
			if (i == 3) {
				System.out.println("当前的线程是     " + Thread.currentThread().getName());
				Thread.yield();
			}
			System.out.println("执行的是    " + Thread.currentThread().getName());
		}

	}

}

运行的结果看一下

 

 

执行的是    草草
执行的是    草草
执行的是    草草
当前的线程是     草草//并没有礼让
执行的是    草草
执行的是    草草
执行的是    花花
执行的是    花花
执行的是    花花
当前的线程是     草草//礼让啦
执行的是    花花
执行的是    花花


可以看到有的让了,有的没有让,这是为什么嘞,我们来看一下yield()方法的源码注释,第一行就给了答案:

 

              A hint to the scheduler that the current thread is willing to yield
	      its current use of a processor. The scheduler is free to ignore this
	      hint.
	      	//暗示调度器让当前线程出让正在使用的处理器。调度器可自由地忽略这种暗示。也就是说让或者不让是看心情哒  
	      <p> Yield is a heuristic attempt to improve relative progression
	      between threads that would otherwise over-utilise a CPU. Its use
	      should be combined with detailed profiling and benchmarking to
	      ensure that it actually has the desired effect.
	     
	      <p> It is rarely appropriate to use this method. It may be useful
	      for debugging or testing purposes, where it may help to reproduce
	      bugs due to race conditions. It may also be useful when designing
	      concurrency control constructs such as the ones in the
	      {@link java.util.concurrent.locks} 

 

 

 

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值