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

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

 更新時(shí)間:2014年01月14日 10:27:30   作者:  
本文對(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()示例
下面,通過(guò)示例查看它的用法。

復(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é)果說(shuō)明:
“線程t1”在能被4整數(shù)的時(shí)候,并沒(méi)有切換到“線程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)前線程離開(kāi)“運(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ì)釋放鎖。

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

相關(guān)文章

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

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

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

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

    現(xiàn)在由于系統(tǒng)越來(lái)越復(fù)雜,導(dǎo)致很多接口速度變慢,這時(shí)候就會(huì)想到可以利用線程池來(lái)處理一些耗時(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)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java讀取resources文件詳解及實(shí)現(xiàn)代碼

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

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

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

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

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

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

    淺析JVM的垃圾回收器

    這篇文章主要介紹了JVM垃圾回收器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī)的相關(guān)知識(shí),感興趣的朋友可以了解下
    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)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談MyBatisPlus中LocalDateTime引發(fā)的一些問(wèn)題和解決辦法

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

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

最新評(píng)論

五大连池市| 秭归县| 九龙县| 诸城市| 车险| 泗水县| 临夏县| 邻水| 綦江县| 昭觉县| 达尔| 固始县| 勐海县| 新化县| 云梦县| 安达市| 大化| 霞浦县| 旺苍县| 桦甸市| 千阳县| 沛县| 麻阳| 资阳市| 武穴市| 台山市| 东平县| 新丰县| 齐齐哈尔市| 永康市| 新化县| 滁州市| 兴义市| 福鼎市| 库伦旗| 多伦县| 曲阜市| 阿拉善右旗| 巫溪县| 杂多县| 嘉鱼县|