真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JUC系列(六)線(xiàn)程池-創(chuàng)新互聯(lián)

📣 📣 📣 📢📢📢
????你好??!小伙伴,我是小冷。是一個(gè)興趣驅(qū)動(dòng)自學(xué)練習(xí)兩年半的的Java工程師。
📒 一位十分喜歡將知識(shí)分享出來(lái)的Java博主??????,擅長(zhǎng)使用Java技術(shù)開(kāi)發(fā)web項(xiàng)目和工具
📒 文章內(nèi)容豐富:覆蓋大部分java必學(xué)技術(shù)棧,前端,計(jì)算機(jī)基礎(chǔ),容器等方面的文章
📒 如果你也對(duì)Java感興趣,關(guān)注小冷吧,一起探索Java技術(shù)的生態(tài)與進(jìn)步,一起討論Java技術(shù)的使用與學(xué)習(xí)
??高質(zhì)量技術(shù)專(zhuān)欄專(zhuān)欄鏈接: 微服務(wù),數(shù)據(jù)結(jié)構(gòu),netty,單點(diǎn)登錄,SSM ,SpringCloudAlibaba等
😝公眾號(hào)😝 : 想全棧的小冷,分享一些技術(shù)上的文章,以及解決問(wèn)題的經(jīng)驗(yàn)
?當(dāng)前專(zhuān)欄:JUC系列

成都創(chuàng)新互聯(lián)公司于2013年開(kāi)始,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元青海做網(wǎng)站,已為上家服務(wù),為青海各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18982081108
線(xiàn)程池

池化技術(shù)、

程序的運(yùn)行 本質(zhì): 占用系統(tǒng)的資源 ! 優(yōu)化資源的使用 =>池化技術(shù)

線(xiàn)程池,連接池,內(nèi)存吃,對(duì)象池, 頻繁的創(chuàng)建銷(xiāo)毀 十分的浪費(fèi)資源

線(xiàn)程池的好處:

  1. 降低資源的消耗
  2. 提高響應(yīng)的速度
  3. 方面管理

線(xiàn)程的復(fù)用 可以控制大并發(fā)數(shù)量,管理線(xiàn)程

三大方法

下圖來(lái)自 阿里巴巴開(kāi)發(fā)規(guī)約手冊(cè)

image-20220302213232478

代碼實(shí)例

public class poolDemo {public static void main(String[] args) {//單個(gè)線(xiàn)程
        ExecutorService Threadpool = Executors.newSingleThreadExecutor();
        // 創(chuàng)建一個(gè)固定的線(xiàn)程池大小
        //ExecutorService Threadpool = Executors.newFixedThreadPool(5);
        //可以伸縮的 遇強(qiáng)則強(qiáng)
        // ExecutorService Threadpool = Executors.newCachedThreadPool();

        try {for (int i = 0; i< 10; i++) {Threadpool.execute(() ->{System.out.println(Thread.currentThread().getName() + "=>ok");
                });
            }
        } catch (Exception e) {e.printStackTrace();
        } finally {//線(xiàn)程池使用完畢 一定要關(guān)閉
            Threadpool.shutdown();
        }
    }
}

三大方法的創(chuàng)建代碼

public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue()));
}

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

public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue());
}
七大參數(shù)

七大參數(shù)

public ThreadPoolExecutor(int corePoolSize, //核心線(xiàn)程池大小
                          int maximumPoolSize,// 大核心線(xiàn)程數(shù)大小
                          long keepAliveTime,// 超時(shí)了沒(méi)有人調(diào)用就會(huì)釋放
                          TimeUnit unit,// 超時(shí)單位
                          BlockingQueueworkQueue,// 阻塞隊(duì)列
                          ThreadFactory threadFactory, // 線(xiàn)程工廠(chǎng),創(chuàng)建線(xiàn)程的
                          RejectedExecutionHandler handler// 拒絕策略
                         ) 
  

這七個(gè)參數(shù)分別有什么作用呢,思路圖

image-20220303182515651

手動(dòng)創(chuàng)建線(xiàn)程池,不用封裝好的方法,使用原生的線(xiàn)程池方法

ThreadPoolExecutor threadpool = new ThreadPoolExecutor(
        2,
        5,
        3,
        TimeUnit.SECONDS,
        new LinkedBlockingDeque<>(3),
        Executors.defaultThreadFactory(),
        // 這個(gè)時(shí)候 舉例子,銀行的人滿(mǎn)了 這種方式就是 不處理 拋出異常
        new ThreadPoolExecutor.AbortPolicy()
);
線(xiàn)程池四種拒絕策略
  • new ThreadPoolExecutor.AbortPolicy() 銀行的人滿(mǎn)了 這種方式就是 不處理 拋出異常

    執(zhí)行效果

    image-20220303183829048

  • new ThreadPoolExecutor.CallerRunsPolicy() 銀行人滿(mǎn)了,哪里來(lái)的去哪里,回到調(diào)用線(xiàn)程輸出,不會(huì)異常

    執(zhí)行結(jié)果

    image-20220303183923829

  • new ThreadPoolExecutor.DiscardPolicy() 隊(duì)列滿(mǎn)了 就拋出全部任務(wù),

    執(zhí)行結(jié)果

    image-20220303184035431

  • new ThreadPoolExecutor.DiscardOldestPolicy() 嘗試和最早的線(xiàn)程競(jìng)爭(zhēng) 查看是否有位置,沒(méi)有就拋出任務(wù)

    執(zhí)行結(jié)果

    image-20220303184127445

代碼實(shí)例

public class poolDemo {public static void main(String[] args) {ThreadPoolExecutor threadpool = new ThreadPoolExecutor(
                2,
                5,
                3,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(3),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.DiscardOldestPolicy()
        );


        //單個(gè)線(xiàn)程
        //ExecutorService Threadpool = Executors.newSingleThreadExecutor();
        // 創(chuàng)建一個(gè)固定的線(xiàn)程池大小
        //ExecutorService Threadpool = Executors.newFixedThreadPool(5);
        //可以伸縮的 遇強(qiáng)則強(qiáng)
        // ExecutorService Threadpool = Executors.newCachedThreadPool();

        try {//大承載如何計(jì)算 : 阻塞隊(duì)列+max數(shù)量
            //超過(guò)的話(huà)就會(huì) 爆出異常 :RejectedExecutionException
            for (int i = 1; i<= 15; i++) {threadpool.execute(() ->{System.out.println(Thread.currentThread().getName() + "=>ok");
                });
            }
        } catch (Exception e) {e.printStackTrace();
        } finally {//線(xiàn)程池使用完畢 一定要關(guān)閉
            threadpool.shutdown();
        }
    }
}
大負(fù)載
  1. CPU密集型 有幾個(gè)核心就定義幾個(gè),可以保證效率最高

    Runtime.getRuntime().availableProcessors() //獲取cpu 核心數(shù)
  2. IO 密集型 判斷程序中 十分消耗IO資源的線(xiàn)程,如: 程序 有 15個(gè)大型任務(wù),io 十分占中資源,那么設(shè)定的比任務(wù)數(shù)量大 就可以保證一定性能、

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


分享文章:JUC系列(六)線(xiàn)程池-創(chuàng)新互聯(lián)
新聞來(lái)源:http://weahome.cn/article/cdejhg.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部