1. 程式人生 > >執行緒的禮讓(Thread.yield())方法

執行緒的禮讓(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.currentThread().yield();
			}
			System.out.println("執行的是    " + Thread.currentThread().getName());
		}

	}

}
執行的結果看一下
執行的是    草草
執行的是    草草
執行的是    草草
當前的執行緒是     草草//並沒有禮讓
執行的是    草草
執行的是    草草
執行的是    花花
執行的是    花花
執行的是    花花
當前的執行緒是     草草//禮讓啦
執行的是    花花
執行的是    花花

可以看到有的讓了,有的沒有讓,這是為什麼嘞,我們來看一下yield()方法的原始碼註釋,第一行就給了答案:
</pre><pre>
              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}