執行緒的禮讓(Thread.yield())方法
阿新 • • 發佈:2019-01-01
在多執行緒裡面有各種各樣的方法,其中有一個禮讓的方法很有意思,現實生活中所謂的禮讓,就是“委屈自己方便他人”!比如過馬路,汽車禮讓行人,當然這是在國外,國內過個斑馬線是要看司機的性格的!那麼線上程中是個什麼情況呢,下面看一下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}