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

Java中的線程池如何實(shí)現(xiàn)線程復(fù)用

 更新時(shí)間:2024年03月27日 09:17:15   作者:IllTamer  
這篇文章主要介紹了Java中的線程池如何實(shí)現(xiàn)線程復(fù)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java線程池實(shí)現(xiàn)線程復(fù)用

閑來(lái)沒(méi)事突然想到這個(gè)問(wèn)題,便百度了下想查看具體實(shí)現(xiàn),無(wú)果。

便自己翻看了下源碼

以下是分析過(guò)程

眾所周知,Java內(nèi)部自帶了個(gè)線程池實(shí)現(xiàn) ExecutorService (雖然一直被人看不起)。

隨便找到其中的一個(gè)靜態(tài)方法

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

可知 ExecutorService 也只是一個(gè)封裝,真正的實(shí)現(xiàn)還得看 ThreadPoolExecutor。

根據(jù)推斷我們可以首先從 `ThreadPoolExecutor#execute` 找起

    public void execute(Runnable command) {
        if (command == null)
            throw new NullPointerException();
        int c = ctl.get();
        if (workerCountOf(c) < corePoolSize) {
            if (addWorker(command, true))
                return;
            c = ctl.get();
        }
        if (isRunning(c) && workQueue.offer(command)) {
            int recheck = ctl.get();
            if (! isRunning(recheck) && remove(command))
                reject(command);
            else if (workerCountOf(recheck) == 0)
                addWorker(null, false);
        }
        else if (!addWorker(command, false))
            reject(command);
    }

讀題解

傳入的 Runnable 實(shí)例最終經(jīng)過(guò)一系列安全檢驗(yàn)被傳入 addWorker 方法中

繼續(xù)追蹤可以看到實(shí)例(firstTask) 被傳入 `ThreadPoolLocal#Worker#init` 的有參構(gòu)造器中

而該 Worker 實(shí)例被添加進(jìn)名為 workers 的哈希表中

終于是找到正主了!

讓我們看看這個(gè) Worker 到底是何方神圣,究竟是如何實(shí)現(xiàn)線程復(fù)用!

private final class Worker extends AbstractQueuedSynchronizer implements Runnable {
    public void run() {
        runWorker(this);
    }
}

好家伙,原來(lái) Worker 也實(shí)現(xiàn)了 Runnable,查看 runWorker 方法可知,當(dāng)當(dāng)前任務(wù)執(zhí)行后task置空,Worker 線程調(diào)用 getTask 方法從任務(wù)隊(duì)列中獲取新任務(wù)并執(zhí)行。

至此便實(shí)現(xiàn)了一個(gè) Worker 線程執(zhí)行多個(gè) Runnable 任務(wù)的功能。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用遞歸復(fù)制文件夾及文件夾

    Java使用遞歸復(fù)制文件夾及文件夾

    這篇文章主要介紹了Java使用遞歸復(fù)制文件夾及文件夾,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 詳解如何在SpringBoot控制器中處理用戶數(shù)據(jù)

    詳解如何在SpringBoot控制器中處理用戶數(shù)據(jù)

    在 Spring Boot 應(yīng)用開(kāi)發(fā)中,控制器(Controller)扮演著至關(guān)重要的角色,它負(fù)責(zé)接收用戶請(qǐng)求、處理數(shù)據(jù)并返回響應(yīng),本文將深入淺出地講解如何在 Spring Boot 控制器中處理用戶數(shù)據(jù),包括獲取請(qǐng)求參數(shù)、處理表單提交、返回 JSON 數(shù)據(jù)等常見(jiàn)場(chǎng)景,需要的朋友可以參考下
    2025-05-05
  • Java貪心算法超詳細(xì)講解

    Java貪心算法超詳細(xì)講解

    人之初性本善,但是隨著自身的經(jīng)歷、生活環(huán)境等因素的影響,人逐漸會(huì)生出貪嗔癡。實(shí)際上不光人有貪念,我們的算法也會(huì)有貪念,今天就和大家介紹下一個(gè)有貪念的算法模型---貪心算法,看看一個(gè)算法是怎么產(chǎn)生貪念的
    2022-05-05
  • MybatisPlus中removeById刪除數(shù)據(jù)庫(kù)未變解決方案

    MybatisPlus中removeById刪除數(shù)據(jù)庫(kù)未變解決方案

    MyBatisPlus中,removeById需實(shí)體類(lèi)標(biāo)注@TableId注解以識(shí)別數(shù)據(jù)庫(kù)主鍵,若字段名不一致,應(yīng)通過(guò)value屬性指定表主鍵字段名,確保正確映射
    2025-08-08
  • 深入理解springMVC中的Model和Session屬性

    深入理解springMVC中的Model和Session屬性

    這篇文章主要介紹了深入理解springMVC中的Model和Session屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Seata?AT模式前后鏡像是如何生成詳解

    Seata?AT模式前后鏡像是如何生成詳解

    這篇文章主要為大家介紹了Seata?AT模式前后鏡像是如何生成的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java Yml格式轉(zhuǎn)換為Properties問(wèn)題

    Java Yml格式轉(zhuǎn)換為Properties問(wèn)題

    本文介紹了作者編寫(xiě)一個(gè)Java工具類(lèi)來(lái)解決在線YAML到Properties轉(zhuǎn)換時(shí)屬性內(nèi)容遺漏的問(wèn)題,通過(guò)遍歷YAML文件的樹(shù)結(jié)構(gòu),作者成功實(shí)現(xiàn)了屬性的完整轉(zhuǎn)換,總結(jié)指出,該工具類(lèi)適用于多種數(shù)據(jù)類(lèi)型,并且代碼簡(jiǎn)潔易懂
    2024-12-12
  • 在Action中以Struts2的方式輸出JSON數(shù)據(jù)的實(shí)例

    在Action中以Struts2的方式輸出JSON數(shù)據(jù)的實(shí)例

    下面小編就為大家?guī)?lái)一篇在Action中以Struts2的方式輸出JSON數(shù)據(jù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • Java多態(tài)在Spring Boot 3中的實(shí)際應(yīng)用實(shí)例教程

    Java多態(tài)在Spring Boot 3中的實(shí)際應(yīng)用實(shí)例教程

    本文詳細(xì)介紹了多態(tài)在SpringBoot中的應(yīng)用,通過(guò)實(shí)際應(yīng)用場(chǎng)景和設(shè)計(jì)模式的深度解析,展示了多態(tài)在構(gòu)建松耦合、高內(nèi)聚軟件架構(gòu)中的重要性,并提供了性能優(yōu)化和最佳實(shí)踐建議,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • jdk8?FunctionalInterface注解源碼解讀

    jdk8?FunctionalInterface注解源碼解讀

    這篇文章主要介紹了jdk8?FunctionalInterface注解源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論

芜湖县| 亚东县| 郯城县| 六盘水市| 收藏| 朝阳县| 锡林浩特市| 漳浦县| 贵州省| 南召县| 泰安市| 克什克腾旗| 淮阳县| 杭锦旗| 仲巴县| 云浮市| 松江区| 丰原市| 桑植县| 乌拉特前旗| 乌什县| 宁国市| 太原市| 合山市| 新平| 西安市| 千阳县| 怀宁县| 堆龙德庆县| 芜湖市| 丹巴县| 马边| 长丰县| 普安县| 扎兰屯市| 怀集县| 湄潭县| 河间市| 舞阳县| 儋州市| 淮阳县|