摘要:創(chuàng)建實(shí)現(xiàn)類執(zhí)行結(jié)束再創(chuàng)建測(cè)試類,并創(chuàng)建線程池創(chuàng)建線程池說(shuō)明類和接口提供線程池操作的接口提供方法,傳入的實(shí)例即本例中的的實(shí)現(xiàn)類,提供種構(gòu)造方法。時(shí)間單位線程工廠用來(lái)創(chuàng)建線程的。
創(chuàng)建Runnable實(shí)現(xiàn)類
package ThreadTest; /** * * @author Administrator * */ public class RunnableTest implements Runnable { @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName()+"--"+i); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+"--執(zhí)行結(jié)束"); } }
再創(chuàng)建測(cè)試類,并創(chuàng)建線程池
package ThreadTest; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import com.google.common.util.concurrent.ThreadFactoryBuilder; public class ThreadPoolTest { public static void main(String[] args) { ThreadFactory threadFactory=new ThreadFactoryBuilder().setNameFormat("myThreadPool-%d").build(); LinkedBlockingQueueworkQueue=new LinkedBlockingQueue (250); ExecutorService executor=new ThreadPoolExecutor(3, 5, 20, TimeUnit.SECONDS, workQueue, threadFactory);//創(chuàng)建線程池 for(int i=0;i<10;i++){ RunnableTest test=new RunnableTest(); executor.execute(test); } } }
說(shuō)明
類和接口
1 ExecutorService 提供線程池操作的接口 提供void execute(Runnable command)方法,傳入Runnable的實(shí)例即本例中的test; 2 ThreadPoolExecutor ExecutorService的實(shí)現(xiàn)類,提供4種構(gòu)造方法。(只寫(xiě)最后一個(gè)) new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); (1)corePoolSize 核心線程數(shù),即本例中填寫(xiě)的數(shù)字3。 (2)workQueue任務(wù)隊(duì)列,負(fù)責(zé)存放超過(guò)核心線程數(shù)的請(qǐng)求,可指定大小如本例中LinkedBlockingQueue(250)的250; (3)maximumPoolSize 創(chuàng)建最大線程數(shù),只有當(dāng)請(qǐng)求超過(guò)任務(wù)隊(duì)列容量和核心線程數(shù)量是才會(huì)創(chuàng)建,即本例中250+3=253; (4)handler 當(dāng)請(qǐng)求超過(guò)最大線程數(shù)maximumPoolSize和任務(wù)隊(duì)列容量之和時(shí),會(huì)調(diào)用。(可以查看該RejectedExecutionHandler接口的幾個(gè)實(shí)現(xiàn)類,定義了處理策略,一般默認(rèn)就行) (5)keepAliveTime 線程存活時(shí)間,對(duì)擋前線程多于核心線程數(shù)量時(shí)會(huì)殺死多于的線程保留到核心線程數(shù)量。 (6)unit 時(shí)間單位 (7)ThreadFactory 線程工廠 用來(lái)創(chuàng)建線程的。(采用Google guava來(lái)創(chuàng)建的)
運(yùn)行展示
創(chuàng)建了0,1,2 三個(gè)核心線程(當(dāng)有請(qǐng)求時(shí)核心線程才會(huì)創(chuàng)建,除非手動(dòng)設(shè)置);
運(yùn)行過(guò)程中可以通過(guò)動(dòng)態(tài)更改corePoolSize和maximumPoolSize 的大小,但是只有ThreadPoolExecutor提供了set方法。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68332.html
摘要:一內(nèi)存區(qū)域虛擬機(jī)在運(yùn)行時(shí),會(huì)把內(nèi)存空間分為若干個(gè)區(qū)域,根據(jù)虛擬機(jī)規(guī)范版的規(guī)定,虛擬機(jī)所管理的內(nèi)存區(qū)域分為如下部分方法區(qū)堆內(nèi)存虛擬機(jī)棧本地方法棧程序計(jì)數(shù)器。前言 在JVM的管控下,Java程序員不再需要管理內(nèi)存的分配與釋放,這和在C和C++的世界是完全不一樣的。所以,在JVM的幫助下,Java程序員很少會(huì)關(guān)注內(nèi)存泄露和內(nèi)存溢出的問(wèn)題。但是,一旦JVM發(fā)生這些情況的時(shí)候,如果你不清楚JVM內(nèi)存的...
摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實(shí)現(xiàn)在軟件開(kāi)發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點(diǎn)如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計(jì)模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過(guò)的點(diǎn)點(diǎn)滴滴,依然清楚的記得當(dāng)初愛(ài)情萌芽的模樣…… Java 進(jìn)階面試問(wèn)題列表 -...
摘要:本文主要內(nèi)容為簡(jiǎn)單總結(jié)中線程池的相關(guān)信息。方法簇方法簇用于創(chuàng)建固定線程數(shù)的線程池。三種常見(jiàn)線程池的對(duì)比上文總結(jié)了工具類創(chuàng)建常見(jiàn)線程池的方法,現(xiàn)對(duì)三種線程池區(qū)別進(jìn)行比較。 概述 線程可認(rèn)為是操作系統(tǒng)可調(diào)度的最小的程序執(zhí)行序列,一般作為進(jìn)程的組成部分,同一進(jìn)程中多個(gè)線程可共享該進(jìn)程的資源(如內(nèi)存等)。在單核處理器架構(gòu)下,操作系統(tǒng)一般使用分時(shí)的方式實(shí)現(xiàn)多線程;在多核處理器架構(gòu)下,多個(gè)線程能夠...
摘要:第一階段基礎(chǔ)階段基礎(chǔ)程序員重點(diǎn)把搞熟練核心是安裝配置基本操作目標(biāo)能夠完成基本的系統(tǒng)安裝,簡(jiǎn)單配置維護(hù)能夠做基本的簡(jiǎn)單系統(tǒng)的開(kāi)發(fā)能夠在中型系統(tǒng)中支持某個(gè)功能模塊的開(kāi)發(fā)。本項(xiàng)不做重點(diǎn)學(xué)習(xí),除非對(duì)前端有興趣。 第一階段:基礎(chǔ)階段(基礎(chǔ)PHP程序員) 重點(diǎn):把LNMP搞熟練(核心是安裝配置基本操作) 目標(biāo):能夠完成基本的LNMP系統(tǒng)安裝,簡(jiǎn)單配置維護(hù);能夠做基本的簡(jiǎn)單系統(tǒng)的PHP開(kāi)發(fā);能夠在P...
閱讀 2328·2021-11-22 14:56
閱讀 1460·2021-09-24 09:47
閱讀 904·2019-08-26 18:37
閱讀 2818·2019-08-26 12:10
閱讀 1522·2019-08-26 11:55
閱讀 3140·2019-08-23 18:07
閱讀 2294·2019-08-23 14:08
閱讀 605·2019-08-23 12:12