yield示例分析
阿新 • • 發佈:2018-11-06
yield示例分析
public class TestYield { private static final Object lock = new Object(); public static void main(String[] args) { YieldThread t1 = new YieldThread(); YieldThread t2 = new YieldThread(); t1.start(); t2.start(); /** * t1得到cpu執行權後,執行run時,獲取到lock物件的鎖,等到t2執行run時時會被阻塞 * t1執行過程中,每當%4==0時,會進行cpu讓步 * 但是由於【yield方法不會釋放鎖】,所以就算t2得到了cpu執行,但還是會被阻塞*/ } static class YieldThread extends Thread{ @Override public void run() { synchronized (lock){ for (int i = 0; i < 10; i++) { System.err.println(this.getName()+"__"+i); if (i%4==0){/** * yield:讓步 * 讓執行緒由“執行狀態”進入到“就緒狀態” * yield是讓出cpu執行時間片,而不釋放lock物件的鎖 */ Thread.yield(); } } } } } }