最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年01月14日 10:27:30   作者:  
本文對Thread中的線程讓步方法yield()進(jìn)行介紹,yield()的作用是讓步。它能讓當(dāng)前線程由“運(yùn)行狀態(tài)”進(jìn)入到“就緒狀態(tài)”,從而讓其它具有相同優(yōu)先級的等待線程獲取執(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)先級的等待線程獲取執(zhí)行權(quán);但是,并不能保證在當(dāng)前線程調(diào)用yield()之后,其它具有相同優(yōu)先級的線程就一定能獲得執(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)”;但是,它不一定會讓其它線程獲取CPU執(zhí)行權(quán)(即,其它線程進(jìn)入到“運(yùn)行狀態(tài)”),即使這個“其它線程”與當(dāng)前調(diào)用yield()的線程具有相同的優(yōu)先級。

3. yield() 與 wait()的比較
我們知道,wait()的作用是讓當(dāng)前線程由“運(yùn)行狀態(tài)”進(jìn)入“等待(阻塞)狀態(tài)”的同時(shí),也會釋放同步鎖。而yield()的作用是讓步,它也會讓當(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()是會線程釋放它所持有對象的同步鎖,而yield()方法不會釋放鎖。

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

復(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對象的同步鎖
            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中啟動了兩個線程t1和t2。t1和t2在run()會引用同一個對象的同步鎖,即synchronized(obj)。在t1運(yùn)行過程中,雖然它會調(diào)用Thread.yield();但是,t2是不會獲取cpu執(zhí)行權(quán)的。因?yàn)?,t1并沒有釋放“obj所持有的同步鎖”!

相關(guān)文章

  • Java?SpringBoot集成文件之如何使用POI導(dǎo)出Word文檔

    Java?SpringBoot集成文件之如何使用POI導(dǎo)出Word文檔

    這篇文章主要介紹了Java?SpringBoot集成文件之如何使用POI導(dǎo)出Word文檔,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • SpringBoot實(shí)現(xiàn)線程池

    SpringBoot實(shí)現(xiàn)線程池

    現(xiàn)在由于系統(tǒng)越來越復(fù)雜,導(dǎo)致很多接口速度變慢,這時(shí)候就會想到可以利用線程池來處理一些耗時(shí)并不影響系統(tǒng)的操作。本文就介紹了SpringBoot線程池的使用,感興趣的可以了解一下
    2021-06-06
  • SpringBoot+VUE實(shí)現(xiàn)前后端分離的實(shí)戰(zhàn)記錄

    SpringBoot+VUE實(shí)現(xiàn)前后端分離的實(shí)戰(zhàn)記錄

    這篇文章主要介紹了SpringBoot+VUE實(shí)現(xiàn)前后端分離的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java讀取resources文件詳解及實(shí)現(xiàn)代碼

    java讀取resources文件詳解及實(shí)現(xiàn)代碼

    這篇文章主要介紹了java讀取resources文件詳解及實(shí)現(xiàn)代碼的相關(guān)資料,在開發(fā)項(xiàng)目的時(shí)候經(jīng)常會遇到讀取文件夾里面的內(nèi)容,需要的朋友可以參考下
    2017-07-07
  • springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)(賬號密碼登錄和使用手機(jī)驗(yàn)證碼登錄)

    springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)(賬號密碼登錄和使用手機(jī)驗(yàn)證碼登錄)

    這篇文章給大家介紹springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)方法,包括賬號密碼登錄和使用手機(jī)驗(yàn)證碼登錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-07-07
  • SpringBoot使用注解進(jìn)行分頁的實(shí)現(xiàn)示例

    SpringBoot使用注解進(jìn)行分頁的實(shí)現(xiàn)示例

    分頁使用可以說非常普遍了,有時(shí)候會需要非常靈活的方式去開啟或關(guān)閉分頁,嘗試使用一下注解的方式來進(jìn)行分頁,本文主要介紹了SpringBoot使用注解進(jìn)行分頁的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺析JVM的垃圾回收器

    淺析JVM的垃圾回收器

    這篇文章主要介紹了JVM垃圾回收器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī)的相關(guān)知識,感興趣的朋友可以了解下
    2020-11-11
  • Java 時(shí)間日期詳細(xì)介紹及實(shí)例

    Java 時(shí)間日期詳細(xì)介紹及實(shí)例

    這篇文章主要介紹了Java 時(shí)間日期詳細(xì)介紹及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • SpringBoot操作mongo實(shí)現(xiàn)方法解析

    SpringBoot操作mongo實(shí)現(xiàn)方法解析

    這篇文章主要介紹了SpringBoot操作mongo實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談MyBatisPlus中LocalDateTime引發(fā)的一些問題和解決辦法

    淺談MyBatisPlus中LocalDateTime引發(fā)的一些問題和解決辦法

    MyBatisPlus進(jìn)行數(shù)據(jù)庫操作時(shí),我們經(jīng)常會遇到處理日期時(shí)間類型的需求,本文主要介紹了淺談MyBatisPlus中LocalDateTime引發(fā)的一些問題和解決辦法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07

最新評論

梨树县| 桂阳县| 贵溪市| 安宁市| 深州市| 辽阳县| 通化县| 包头市| 高邑县| 普安县| 勐海县| 龙州县| 常山县| 象山县| 河源市| 白沙| 丹棱县| 九寨沟县| 台前县| 上栗县| 宜兰县| 洛南县| 荥阳市| 且末县| 陵水| 拉孜县| 黔东| 荣昌县| 开原市| 衡东县| 镇雄县| 沙雅县| 瓦房店市| 平和县| 深州市| 鄂伦春自治旗| 横峰县| 广州市| 怀仁县| 龙口市| 金寨县|