国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務(wù)器之家 - 編程語言 - JAVA教程 - java基本教程之線程讓步 java多線程教程

java基本教程之線程讓步 java多線程教程

2019-10-31 14:50java教程網(wǎng) JAVA教程

本文對(duì)Thread中的線程讓步方法yield()進(jìn)行介紹,yield()的作用是讓步。它能讓當(dāng)前線程由“運(yùn)行狀態(tài)”進(jìn)入到“就緒狀態(tài)”,從而讓其它具有相同優(yōu)先級(jí)的等待線程獲取執(zhí)行權(quán),大家參考使用吧

本章涉及到的內(nèi)容包括:
1. yield()介紹
2. yield()示例
3. yield() 與 wait()的比較

1. yield()介紹
yield()的作用是讓步。它能讓當(dāng)前線程由“運(yùn)行狀態(tài)”進(jìn)入到“就緒狀態(tài)”,從而讓其它具有相同優(yōu)先級(jí)的等待線程獲取執(zhí)行權(quán);但是,并不能保證在當(dāng)前線程調(diào)用yield()之后,其它具有相同優(yōu)先級(jí)的線程就一定能獲得執(zhí)行權(quán);也有可能是當(dāng)前線程又進(jìn)入到“運(yùn)行狀態(tài)”繼續(xù)運(yùn)行!

2. yield()示例
下面,通過示例查看它的用法。

 

復(fù)制代碼代碼如下:


// YieldTest.java的源碼
class ThreadA extends Thread{
    public ThreadA(String name){ 
        super(name); 
    } 
    public synchronized void run(){ 
        for(int i=0; i <10; i++){ 
            System.out.printf("%s [%d]:%d\n", this.getName(), this.getPriority(), i); 
            // i整除4時(shí),調(diào)用yield
            if (i%4 == 0)
                Thread.yield();
        } 
    } 
}

 

public class YieldTest{ 
    public static void main(String[] args){ 
        ThreadA t1 = new ThreadA("t1"); 
        ThreadA t2 = new ThreadA("t2"); 
        t1.start(); 
        t2.start();
    } 
}

 

(某一次的)運(yùn)行結(jié)果:

 

復(fù)制代碼代碼如下:

t1 [5]:0
t2 [5]:0
t1 [5]:1
t1 [5]:2
t1 [5]:3
t1 [5]:4
t1 [5]:5
t1 [5]:6
t1 [5]:7
t1 [5]:8
t1 [5]:9
t2 [5]:1
t2 [5]:2
t2 [5]:3
t2 [5]:4
t2 [5]:5
t2 [5]:6
t2 [5]:7
t2 [5]:8
t2 [5]:9

 

結(jié)果說明:
“線程t1”在能被4整數(shù)的時(shí)候,并沒有切換到“線程t2”。這表明,yield()雖然可以讓線程由“運(yùn)行狀態(tài)”進(jìn)入到“就緒狀態(tài)”;但是,它不一定會(huì)讓其它線程獲取CPU執(zhí)行權(quán)(即,其它線程進(jìn)入到“運(yùn)行狀態(tài)”),即使這個(gè)“其它線程”與當(dāng)前調(diào)用yield()的線程具有相同的優(yōu)先級(jí)。

3. yield() 與 wait()的比較
我們知道,wait()的作用是讓當(dāng)前線程由“運(yùn)行狀態(tài)”進(jìn)入“等待(阻塞)狀態(tài)”的同時(shí),也會(huì)釋放同步鎖。而yield()的作用是讓步,它也會(huì)讓當(dāng)前線程離開“運(yùn)行狀態(tài)”。它們的區(qū)別是:
(01) wait()是讓線程由“運(yùn)行狀態(tài)”進(jìn)入到“等待(阻塞)狀態(tài)”,而不yield()是讓線程由“運(yùn)行狀態(tài)”進(jìn)入到“就緒狀態(tài)”。
(02) wait()是會(huì)線程釋放它所持有對(duì)象的同步鎖,而yield()方法不會(huì)釋放鎖。

下面通過示例演示yield()是不會(huì)釋放鎖的。

 

復(fù)制代碼代碼如下:


// YieldLockTest.java 的源碼
public class YieldLockTest{

 

    private static Object obj = new Object();

    public static void main(String[] args){ 
        ThreadA t1 = new ThreadA("t1"); 
        ThreadA t2 = new ThreadA("t2"); 
        t1.start(); 
        t2.start();
    }

    static class ThreadA extends Thread{
        public ThreadA(String name){ 
            super(name); 
        } 
        public void run(){ 
            // 獲取obj對(duì)象的同步鎖
            synchronized (obj) {
                for(int i=0; i <10; i++){ 
                    System.out.printf("%s [%d]:%d\n", this.getName(), this.getPriority(), i); 
                    // i整除4時(shí),調(diào)用yield
                    if (i%4 == 0)
                        Thread.yield();
                }
            }
        } 
    } 
}

 

(某一次)運(yùn)行結(jié)果:

 

復(fù)制代碼代碼如下:

t1 [5]:0
t1 [5]:1
t1 [5]:2
t1 [5]:3
t1 [5]:4
t1 [5]:5
t1 [5]:6
t1 [5]:7
t1 [5]:8
t1 [5]:9
t2 [5]:0
t2 [5]:1
t2 [5]:2
t2 [5]:3
t2 [5]:4
t2 [5]:5
t2 [5]:6
t2 [5]:7
t2 [5]:8
t2 [5]:9

 

結(jié)果說明:
主線程main中啟動(dòng)了兩個(gè)線程t1和t2。t1和t2在run()會(huì)引用同一個(gè)對(duì)象的同步鎖,即synchronized(obj)。在t1運(yùn)行過程中,雖然它會(huì)調(diào)用Thread.yield();但是,t2是不會(huì)獲取cpu執(zhí)行權(quán)的。因?yàn)椋瑃1并沒有釋放“obj所持有的同步鎖”!

延伸 · 閱讀

精彩推薦
449
主站蜘蛛池模板: 精品一区二区三区免费毛片爱 | 成人涩涩日本国产一区 | 中文字幕不卡 | 精品视频久久久 | 97国产精品 | 国产美女久久 | 成人午夜精品一区二区三区 | 亚洲人成在线播放 | 亚洲精品一区二区三区蜜桃久 | 黄色片地址| 91嫩草精品 | 啪啪av| 国产成人精品一区二区三区四区 | 国产a级黄色毛片 | 波多野结衣三区 | 日产精品一区二区三区在线观看 | 日韩视频在线一区二区 | 免费a级毛片大学生免费观看 | 午夜激情视频在线观看 | 亚洲在线视频 | 91精品久久久久 | 欧美黄色精品 | 亚洲国产精品久久 | 99亚洲伊人久久精品影院红桃 | 久草热线 | 精品一二区 | 久久伊99综合婷婷久久伊 | 欧美日韩在线免费观看 | 北条麻妃一区二区三区在线观看 | 欧美性一区 | 日本精品一区二 | 久久久久久久国产精品 | 国产极品探花 | 欧美日韩综合 | 久久精品2 | 四虎影| a资源在线观看 | 免费的一级黄色片 | 国产精品久久久久久久 | 欧美在线国产 | 91精品国产高清一区二区三区 |