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

Java中創(chuàng)建線程池的幾種方式以及區(qū)別

 更新時(shí)間:2024年11月06日 11:01:09   作者:The-Venus  
創(chuàng)建線程池有多種方式,主要通過(guò) Java 的 java.util.concurrent 包提供的 Executors 工具類(lèi)來(lái)實(shí)現(xiàn),本文給大家介紹了幾種常見(jiàn)的線程池類(lèi)型及其區(qū)別,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下

1. FixedThreadPool

//創(chuàng)建一個(gè)固定大小的線程池,模擬提交 10 個(gè)任務(wù)到線程池。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FixedThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); // 創(chuàng)建一個(gè)具有3個(gè)線程的固定線程池
        
        for (int i = 1; i <= 10; i++) {
            final int task = i;
            fixedThreadPool.execute(() -> {
                System.out.println("執(zhí)行任務(wù) " + task + ",線程:" + Thread.currentThread().getName());
            });
        }
        
        fixedThreadPool.shutdown();
    }
}
  • 特點(diǎn):創(chuàng)建一個(gè)固定大小的線程池,池中始終保持指定數(shù)量的線程。

  • 適用場(chǎng)景:適用于固定并發(fā)數(shù)的任務(wù),比如定量的短期并發(fā)任務(wù)。

  • 優(yōu)點(diǎn):能夠有效地控制線程數(shù)量,避免資源消耗過(guò)多。

  • 缺點(diǎn):如果所有線程都在執(zhí)行任務(wù),而新的任務(wù)不斷提交,可能會(huì)造成等待隊(duì)列過(guò)長(zhǎng)。

2. CachedThreadPool

//創(chuàng)建一個(gè)緩存線程池來(lái)處理任務(wù),模擬并發(fā)執(zhí)行 10 個(gè)任務(wù)

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CachedThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
        
        for (int i = 1; i <= 10; i++) {
            final int task = i;
            cachedThreadPool.execute(() -> {
                System.out.println("執(zhí)行任務(wù) " + task + ",線程:" + Thread.currentThread().getName());
            });
        }
        
        cachedThreadPool.shutdown();
    }
}
  • 特點(diǎn):創(chuàng)建一個(gè)可以根據(jù)需要自動(dòng)擴(kuò)展的線程池,當(dāng)線程空閑 60 秒后會(huì)被回收。
  • 適用場(chǎng)景:適合執(zhí)行大量耗時(shí)較短的異步任務(wù)。
  • 優(yōu)點(diǎn):線程數(shù)量不受限制(受系統(tǒng)資源限制),對(duì)于任務(wù)短小、并發(fā)量大但不穩(wěn)定的場(chǎng)景效果較好。
  • 缺點(diǎn):如果任務(wù)增長(zhǎng)過(guò)快,會(huì)創(chuàng)建大量線程,可能會(huì)造成 OOM(Out of Memory)異常。

3. SingleThreadExecutor

//創(chuàng)建一個(gè)單線程線程池,順序執(zhí)行多個(gè)任務(wù)。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SingleThreadExecutorExample {
    public static void main(String[] args) {
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
        
        for (int i = 1; i <= 5; i++) {
            final int task = i;
            singleThreadExecutor.execute(() -> {
                System.out.println("執(zhí)行任務(wù) " + task + ",線程:" + Thread.currentThread().getName());
            });
        }
        
        singleThreadExecutor.shutdown();
    }
}
  • 特點(diǎn):創(chuàng)建單線程化的線程池,始終只有一個(gè)工作線程。
  • 適用場(chǎng)景:適用于需要保證任務(wù)順序執(zhí)行的場(chǎng)景,避免多線程并發(fā)的復(fù)雜性。
  • 優(yōu)點(diǎn):可以保證任務(wù)按順序執(zhí)行,適合單一任務(wù)隊(duì)列。
  • 缺點(diǎn):性能較低,不適合需要高并發(fā)的場(chǎng)景。

4. ScheduledThreadPool

//創(chuàng)建一個(gè)支持定時(shí)和周期性執(zhí)行任務(wù)的線程池,示例任務(wù)每隔 2 秒執(zhí)行一次,共執(zhí)行 3 次。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledThreadPoolExample {
    public static void main(String[] args) {
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2); // 創(chuàng)建一個(gè)有2個(gè)線程的定時(shí)線程池
        
        scheduledThreadPool.scheduleAtFixedRate(() -> {
            System.out.println("定時(shí)任務(wù)執(zhí)行,線程:" + Thread.currentThread().getName());
        }, 0, 2, TimeUnit.SECONDS); // 0秒延遲后開(kāi)始,每隔2秒執(zhí)行一次任務(wù)
        
        // 程序運(yùn)行5秒后關(guān)閉線程池
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        scheduledThreadPool.shutdown();
    }
}
  • 特點(diǎn):創(chuàng)建一個(gè)支持定時(shí)或周期性任務(wù)執(zhí)行的線程池。
  • 適用場(chǎng)景:適合執(zhí)行定時(shí)任務(wù)或周期性任務(wù),比如定時(shí)器、定時(shí)檢查等。
  • 優(yōu)點(diǎn):可以方便地實(shí)現(xiàn)周期性任務(wù)管理。
  • 缺點(diǎn):對(duì)高并發(fā)任務(wù)的處理能力較弱,通常用于任務(wù)量不大的場(chǎng)景。

5. WorkStealingPool(Java 8 引入)

//創(chuàng)建一個(gè)基于任務(wù)分解的線程池來(lái)并行執(zhí)行多個(gè)任務(wù),適合處理需要拆分的小任務(wù)。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class WorkStealingPoolExample {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService workStealingPool = Executors.newWorkStealingPool(); // 創(chuàng)建默認(rèn)線程數(shù)為CPU核心數(shù)的工作竊取線程池
        
        for (int i = 1; i <= 8; i++) {
            final int task = i;
            workStealingPool.submit(() -> {
                System.out.println("執(zhí)行任務(wù) " + task + ",線程:" + Thread.currentThread().getName());
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
        
        // 讓主線程等待子任務(wù)執(zhí)行完成
        workStealingPool.awaitTermination(3, TimeUnit.SECONDS);
        workStealingPool.shutdown();
    }
}
  • 特點(diǎn):基于 ForkJoinPool 實(shí)現(xiàn),適用于大任務(wù)拆分成小任務(wù)的并行處理。線程數(shù)默認(rèn)為處理器核心數(shù)。
  • 適用場(chǎng)景:適合處理較為復(fù)雜的并行任務(wù),比如分治算法。
  • 優(yōu)點(diǎn):通過(guò)“工作竊取”算法實(shí)現(xiàn)任務(wù)的動(dòng)態(tài)負(fù)載均衡,能夠有效提升多核 CPU 的利用率。
  • 缺點(diǎn):由于線程數(shù)不固定,可能對(duì)資源使用較多,不適合所有應(yīng)用。

區(qū)別總結(jié)

線程池類(lèi)型線程數(shù)量控制特點(diǎn)適用場(chǎng)景
FixedThreadPool固定數(shù)量固定線程數(shù),適合穩(wěn)定的任務(wù)并發(fā)固定并發(fā)任務(wù)
CachedThreadPool自動(dòng)擴(kuò)展動(dòng)態(tài)擴(kuò)展,空閑線程自動(dòng)回收,適合任務(wù)短小但并發(fā)量不穩(wěn)定短期的異步并發(fā)任務(wù)
SingleThreadExecutor單一線程單線程順序執(zhí)行任務(wù),保證順序順序執(zhí)行的任務(wù)
ScheduledThreadPool可控核心線程數(shù)支持定時(shí)或周期性任務(wù)定時(shí)任務(wù)、周期性任務(wù)
WorkStealingPool默認(rèn) CPU 核數(shù)基于任務(wù)拆分并行處理,提高多核 CPU 利用率并行計(jì)算和多任務(wù)的分解

以上就是Java中創(chuàng)建線程池的幾種方式以及區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Java創(chuàng)建線程池的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot集成P6Spy監(jiān)控SQL執(zhí)行耗時(shí)的詳細(xì)步驟

    SpringBoot集成P6Spy監(jiān)控SQL執(zhí)行耗時(shí)的詳細(xì)步驟

    P6Spy 是一款開(kāi)源的 Java 框架,是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)監(jiān)控工具,可以幫助開(kāi)發(fā)者監(jiān)控并分析應(yīng)用程序與數(shù)據(jù)庫(kù)之間的交互行為,本文給大家介紹了SpringBoot集成P6Spy監(jiān)控SQL執(zhí)行耗時(shí)的詳細(xì)步驟,需要的朋友可以參考下
    2025-07-07
  • Java并發(fā)編程之詳解ConcurrentHashMap類(lèi)

    Java并發(fā)編程之詳解ConcurrentHashMap類(lèi)

    在之前的文章中已經(jīng)為大家介紹了java并發(fā)編程的工具:BlockingQueue接口、ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue、BlockingDeque接口,本文為系列文章第八篇.需要的朋友可以參考下
    2021-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:三角數(shù)字

    Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:三角數(shù)字

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:三角數(shù)字,本文直接給出實(shí)現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06
  • Java使用easyExcel實(shí)現(xiàn)Excel文件解析

    Java使用easyExcel實(shí)現(xiàn)Excel文件解析

    這篇文章主要為大家詳細(xì)介紹了Java如何使用easyExcel實(shí)現(xiàn)Excel文件解析,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • 使用Assembly打包和部署SpringBoot工程方式

    使用Assembly打包和部署SpringBoot工程方式

    文章介紹了SpringBoot項(xiàng)目的兩種部署方式:Docker容器部署和FatJar直接部署,FatJar部署存在配置文件隱藏和啟動(dòng)腳本復(fù)雜的問(wèn)題,而Assembly打包方式可以解決這些問(wèn)題,使得SpringBoot能夠加載jar外的配置文件并提供服務(wù)化的啟動(dòng)腳本
    2024-12-12
  • java多線程編程之使用thread類(lèi)創(chuàng)建線程

    java多線程編程之使用thread類(lèi)創(chuàng)建線程

    在Java中創(chuàng)建線程有兩種方法:使用Thread類(lèi)和使用Runnable接口。在使用Runnable接口時(shí)需要建立一個(gè)Thread實(shí)例
    2014-01-01
  • Java基于ReadWriteLock開(kāi)發(fā)高性能的緩存系統(tǒng)

    Java基于ReadWriteLock開(kāi)發(fā)高性能的緩存系統(tǒng)

    在現(xiàn)代軟件開(kāi)發(fā)中,緩存技術(shù)被廣泛應(yīng)用于提高應(yīng)用程序的性能和響應(yīng)速度,本文將介紹如何使用??ReadWriteLock??來(lái)實(shí)現(xiàn)一個(gè)高效的緩存系統(tǒng),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-08-08
  • Java零基礎(chǔ)也看得懂的單例模式與final及抽象類(lèi)和接口詳解

    Java零基礎(chǔ)也看得懂的單例模式與final及抽象類(lèi)和接口詳解

    本文主要講了單例模式中的餓漢式和懶漢式的區(qū)別,final的使用,抽象類(lèi)的介紹以及接口的具體內(nèi)容,感興趣的朋友來(lái)看看吧
    2022-05-05
  • 全面解析SpringBoot配置文件

    全面解析SpringBoot配置文件

    這篇文章主要為大家全面的解析SpringBoot-配置文件,文中附含詳細(xì)的圖文示例代碼,以便同學(xué)們能更好的理解,有需要的同學(xué)可以借鑒參考下
    2021-09-09
  • Spring Boot部署到Tomcat過(guò)程中遇到的問(wèn)題匯總

    Spring Boot部署到Tomcat過(guò)程中遇到的問(wèn)題匯總

    這篇文章主要給大家分享了關(guān)于Spring Boot部署到Tomcat過(guò)程中遇到的一些問(wèn)題,文中將解決的方法介紹非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評(píng)論

京山县| 汝南县| 蕲春县| 宝应县| 萨嘎县| 镇宁| 上林县| 海南省| 泸州市| 齐齐哈尔市| 湖南省| 宁都县| 离岛区| 洞头县| 淮北市| 三门县| 新竹县| 辰溪县| 洞头县| 永平县| 无棣县| 松桃| 饶平县| 偏关县| 慈利县| 内乡县| 乌鲁木齐县| 巨鹿县| 将乐县| 宜君县| 云梦县| 资中县| 疏附县| 淳安县| 上犹县| 团风县| 德阳市| 香港 | 黑山县| 八宿县| 乌恰县|