1、定義
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)與策劃設(shè)計,米林網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:米林等地區(qū)。米林做網(wǎng)站價格咨詢:18982081108緩存一定線程數(shù)量的區(qū)域。
2、作用
復用、管理線程,避免新建線程/銷毀線程消耗CPU資源。
3、核心參數(shù)
參數(shù) 作用
corePoolSize(核心線程數(shù)) 核心線程會一直存活
maximumPoolSize(大線程數(shù)) 活動線程達到大線程數(shù),后續(xù)新任務(wù)會阻塞
keepAliveTime(閑置線程超時時長) 非核心線程閑置超過該時長將被回收(設(shè)置作用于核心線程threadPoolExecutor.allowCoreThreadTimeOut(true))
unit(keepAliveTime 單位) 如:TimeUnit.MILLISECONDS, TimeUnit.SECONDS
workQueue(任務(wù)隊列) 存放 execute() 提交的 Runnable 對象
threadFactory(線程工廠) 為線程池創(chuàng)建線程,Thread newThread(Runnable r)
4、工作流程
5、常用線程池
類型 線程類型 線程數(shù)量 特點 場景
定長線程池(FixedThreadPool) 核心線程 固定 1、核心線程空閑不會回收。2、所有線程處于活動狀態(tài),新的任務(wù)將處于等待狀態(tài),直到有線程空閑。3、任務(wù)隊列無大小限制。4、堆積的任務(wù)可能占用大內(nèi)存 控制線程大并發(fā)數(shù)
定時線程池(ScheduledThreadPool) 核心、非核心線程 核心:固定,非核心:無限制 1、非核心線程閑置時會被回收。2、非核心線程無限制可能創(chuàng)建非常多線程。 執(zhí)行定時/ 周期性任務(wù)
可緩存線程池(CachedThreadPool) 非核心 無限制 1、優(yōu)先使用閑置線程處理任務(wù)。2、線程大小無限制。3、60 秒 回收閑置線程。4、非核心線程無限制可能創(chuàng)建非常多線程。 執(zhí)行數(shù)量多、耗時少的任務(wù)
單線程線程池(SingleThreadExecutor) 核心線程 1個 1、任務(wù)順序執(zhí)行。2、不需要處理線程同步。3、堆積的任務(wù)可能占用大內(nèi)存 單線程
6、具體使用
public class ExecutorDemo {
public static void main(String[] args) {
createThreadPoolExecutor();
createFixedThreadPool();
createScheduledThreadPool();
createCachedThreadPool();
createSingleThreadExecutor();
}
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final int KEEP_ALIVE_SECONDS = 30;
private static final BlockingQueue sPoolWorkQueue =
new LinkedBlockingQueue(128);
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
}
};
public static void createThreadPoolExecutor() {
// 1.創(chuàng)建自定義線程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
CORE_POOL_SIZE,
MAXIMUM_POOL_SIZE,
KEEP_ALIVE_SECONDS,
TimeUnit.SECONDS,
sPoolWorkQueue,
sThreadFactory);
threadPoolExecutor.allowCoreThreadTimeOut(true);
// 2.創(chuàng)建任務(wù)
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("自定義線程池-任務(wù)執(zhí)行");
}
};
// 3.通過線程池執(zhí)行任務(wù)
threadPoolExecutor.execute(task);
// 4.關(guān)閉線程池
threadPoolExecutor.shutdown();
}
public static void createFixedThreadPool() {
// 1.創(chuàng)建定長線程池
// public static ExecutorService newFixedThreadPool(int var0) {
// return new ThreadPoolExecutor(var0, var0, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());
// }
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
// 2.創(chuàng)建任務(wù)
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("定長線程池-任務(wù)執(zhí)行");
}
};
// 3.通過線程池執(zhí)行任務(wù)
fixedThreadPool.execute(task);
// 4.關(guān)閉線程池
fixedThreadPool.shutdown();
}
public static void createScheduledThreadPool() {
// 1.創(chuàng)建定時線程池
// public ScheduledThreadPoolExecutor(int var1) {
// super(var1, 2147483647, 0L, TimeUnit.NANOSECONDS, new ScheduledThreadPoolExecutor.DelayedWorkQueue());
// } 無錫婦科醫(yī)院排行 http://www.0510bhyy.com/
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
// 2.創(chuàng)建任務(wù)
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("定時線程池-任務(wù)執(zhí)行");
}
};
// 3.通過線程池執(zhí)行任務(wù),execute 立即執(zhí)行,schedule 延遲1s執(zhí)行,scheduleAtFixedRate 延遲1s執(zhí)行之后每隔2秒執(zhí)行
// scheduledThreadPool.execute(task);
scheduledThreadPool.schedule(task, 1000L, TimeUnit.MILLISECONDS);
// scheduledThreadPool.scheduleAtFixedRate(task,1000L,2000L, TimeUnit.MILLISECONDS);
// 4.關(guān)閉線程池
scheduledThreadPool.shutdown();
}
public static void createCachedThreadPool() {
// 1.創(chuàng)建可緩存線程池
// public static ExecutorService newCachedThreadPool() {
// return new ThreadPoolExecutor(0, 2147483647, 60L, TimeUnit.SECONDS, new SynchronousQueue());
// }
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// 2.創(chuàng)建任務(wù)
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("可緩存線程池-任務(wù)執(zhí)行");
}
};
// 3.通過線程池執(zhí)行任務(wù)
cachedThreadPool.execute(task);
// 4.關(guān)閉線程池
cachedThreadPool.shutdown();
}
public static void createSingleThreadExecutor() {
// 1.創(chuàng)建單線程線程池
// public static ExecutorService newSingleThreadExecutor() {
// return new Executors.FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()));
// }
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
// 2.創(chuàng)建任務(wù)
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("單線程線程池-任務(wù)執(zhí)行");
}
};
// 3.通過線程池執(zhí)行任務(wù)
singleThreadExecutor.execute(task);
// 4.關(guān)閉線程池
singleThreadExecutor.shutdown();
}
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。