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

java中多線程與線程池的基本使用方法

 更新時間:2021年09月13日 11:38:59   作者:Mac編程之道  
在Java中,我們可以利用多線程來最大化地壓榨CPU多核計算的能力,下面這篇文章主要給大家介紹了關于java中多線程與線程池基本使用的相關資料,需要的朋友可以參考下

前言

在java中,如果每個請求到達就創(chuàng)建一個新線程,開銷是相當大的。在實際使用中,服務器在創(chuàng)建和銷毀線程上花費的時間和消耗的系統(tǒng)資源都相當大,甚至可能要比在處理實際的用戶請求的時間和資源要多的多。除了創(chuàng)建和銷毀線程的開銷之外,活動的線程也需要消耗系統(tǒng)資源。如果在一個jvm里創(chuàng)建太多的線程,可能會使系統(tǒng)由于過度消耗內存或“切換過度”而導致系統(tǒng)資源不足。為了防止資源不足,服務器應用程序需要采取一些辦法來限制任何給定時刻處理的請求數(shù)目,盡可能減少創(chuàng)建和銷毀線程的次數(shù),特別是一些資源耗費比較大的線程的創(chuàng)建和銷毀,盡量利
用已有對象來進行服務,這就是“池化資源”技術產(chǎn)生的原因。

線程池主要用來解決線程生命周期開銷問題和資源不足問題。通過對多個任務重復使用線程,線程創(chuàng)建的開銷就被分攤到了多個任務上了,而且由于在請求到達時線程已經(jīng)存在,所以消除了線程創(chuàng)建所帶來的延遲。這樣,就可以立即為請求服務,使用應用程序響應更快。另外,通過適當?shù)恼{整線程中的線程數(shù)目可以防止出現(xiàn)資源不足的情況。

多線程大大提高程序運行效率,我們在開發(fā)過程中經(jīng)常會開啟一個線程來執(zhí)行一些費時的任務。開啟一個線程有4種方式,在下面的文章我將詳細的去講解。

繼承Thread

繼承Thread去執(zhí)行任務,確實可以開啟一個線程去執(zhí)行任務,如果經(jīng)常的去開啟一些線程,也會導致系統(tǒng)資源的浪費。

public static class Mythread extends Thread{
        @Override
        public void run() {
            System.out.println("當前線程"+Thread.currentThread().getId());
            int i = 10/2;
            System.out.println("運行結果"+i);
        }
    }
//調用線程。
public static void main(String[] args) throws ExecutionException, InterruptedException {
        /**thread執(zhí)行方式*/
        Mythread mythread = new Mythread();
        mythread.start();//啟動線程
        System.out.println("main--end");
}

實現(xiàn)Runnale接口

public static class MyRunable implements Runnable {

    @Override
    public void run() {
        System.out.println("當前線程"+Thread.currentThread().getId());
        int i = 10/2;
        System.out.println("運行結果"+i);

    }
}

調用。

/**
 * runable的啟動方式
 */

MyRunable runable = new MyRunable();
new Thread(runable).start();
System.out.println("main--end");

Callable

/**
 * Callable可以允許有返回值
 */

public static class Callale01 implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("當前線程"+Thread.currentThread().getId());
        int i = 10/2;
        System.out.println("運行結果"+i);
        return i;
    }
}

調用。這里需要用callable構建futureTask

/**
 * callale的啟動方式
 */
FutureTask<Integer> futureTask =new FutureTask<>(new Callale01());
//取返回結果。
Integer i = futureTask.get();
new Thread(futureTask).start();
System.out.println("返回結果是:"+i);

線程池

線程池才是我們java開發(fā)中,經(jīng)常用到一種開啟多線程的方式,線程池,自己去管理線程??梢怨?jié)省系統(tǒng)資源。通常我們會將下面的一些配置寫在一些配置類中

/**
 * 七大參數(shù)
 * corePoolSize: 1.核心線程數(shù)[一直存在]: 線程池創(chuàng)建好了以后。就準備就緒的線程數(shù)量。
 * maxinumPoolSize: 2 最大線程數(shù)量
 * keepaliveTime: 存活時間。空閑線程的最大的等待時間。
 * unit  等待時間的單位
 * blockingQueue 阻塞隊列。如果任務很多就會放在隊列里面,只要有線程空閑了,就會去隊列里面去取。
 * threadFactory :線程的工廠。
 * RejectExecutionHandler :如果隊列滿了。按照我們指定的策略。拒絕執(zhí)行任務。
 *
 */
 ThreadPoolExecutor executor = new ThreadPoolExecutor(5,100,10,TimeUnit.SECONDS,
          new LinkedBlockingQueue<>(100),
                                                    Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

常見的4種線程池。

1 newCachedThreadPool()

創(chuàng)建一個可緩存的線程池,如果線程池長度超過了處理的需要,可靈活的回收空閑線程。若無可回收。則創(chuàng)建新線程。

Executors.newCachedThreadPool();

2.newFixedThreadPool(6)

創(chuàng)建一個固定大小的線程池。

3 newScheduledThreadPool()

定時任務的線程池。

4.newSingleThreadExecutor()

Executors.newSingleThreadExecutor();

總結

到此這篇關于java中多線程與線程池基本使用的文章就介紹到這了,更多相關java多線程和線程池使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用springboot整合websocket實現(xiàn)群聊教程

    使用springboot整合websocket實現(xiàn)群聊教程

    websocket怎么說呢,就是服務器可以主動向客戶端發(fā)起對話,下面就是springboot整合websocket實現(xiàn)群聊的操作代碼,一起來看一下get新技能吧
    2021-08-08
  • Mybatis如何通過注解開啟使用二級緩存

    Mybatis如何通過注解開啟使用二級緩存

    這篇文章主要介紹了Mybatis基于注解開啟使用二級緩存,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Feign超時 在yml文件里的配置方式

    Feign超時 在yml文件里的配置方式

    這篇文章主要介紹了Feign超時 在yml文件里的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java swing實現(xiàn)電影購票系統(tǒng)

    java swing實現(xiàn)電影購票系統(tǒng)

    這篇文章主要為大家詳細介紹了java swing實現(xiàn)電影購票系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺談JVM之java class文件的密碼本

    淺談JVM之java class文件的密碼本

    一切的一切都是從javac開始的。從那一刻開始,java文件就從我們肉眼可分辨的文本文件,變成了冷冰冰的二進制文件。變成了二進制文件是不是意味著我們無法再深入的去了解java class文件了呢?答案是否定的。本文將詳細介紹JVM之java class文件的密碼本。
    2021-06-06
  • MyBatis學習教程(五)-實現(xiàn)關聯(lián)表查詢方法詳解

    MyBatis學習教程(五)-實現(xiàn)關聯(lián)表查詢方法詳解

    本文給大家介紹mybatis關聯(lián)查詢,包括一對一關聯(lián)查詢,一對多關聯(lián)查詢,代碼簡單易懂,感興趣的朋友一起學習吧
    2016-05-05
  • Java中classpath講解及使用方式

    Java中classpath講解及使用方式

    本文詳細講解了Java中classpath講解及使用方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • springboot使用@Slf4j進行日志的記錄步驟詳解

    springboot使用@Slf4j進行日志的記錄步驟詳解

    這篇文章主要介紹了springboot使用@Slf4j進行日志的記錄,使用@Slf4j的注解進行日志記錄非常方便,本文給大家分享操作步驟,需要的朋友可以參考下
    2023-08-08
  • IDEA連接Mysql數(shù)據(jù)庫的詳細圖文教程

    IDEA連接Mysql數(shù)據(jù)庫的詳細圖文教程

    項目開發(fā)時使用Intellij IDEA連接本地數(shù)據(jù)庫,將數(shù)據(jù)庫可視化,還可對數(shù)據(jù)庫表直接進行增刪改查操作,方便快捷又清晰,下面這篇文章主要給大家介紹了關于IDEA連接Mysql數(shù)據(jù)庫的詳細圖文教程,需要的朋友可以參考下
    2023-03-03
  • java中Cookie被禁用后Session追蹤問題

    java中Cookie被禁用后Session追蹤問題

    這篇文章主要介紹了Java中Cookie被禁用后Session追蹤問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03

最新評論

葫芦岛市| 苏州市| 凤冈县| 铜山县| 兴安县| 汽车| 平定县| 阳西县| 仲巴县| 南投县| 曲周县| 顺平县| 博客| 武隆县| 朝阳市| 上栗县| 华安县| 乌兰察布市| 武山县| 博湖县| 兴义市| 寿宁县| 凌海市| 张家口市| 吴桥县| 芒康县| 唐河县| 丰台区| 安岳县| 工布江达县| 玉山县| 天祝| 洪湖市| 庆安县| 万载县| 中西区| 新巴尔虎左旗| 元阳县| 泰兴市| 大兴区| 伊宁市|