失效链接处理 |
ThreadPoolExecutor线程池 PDF 下载
本站整理下载:
相关截图:
主要内容:
1. 线程池的优势
节省资源开销:重复利用线程池中的线程,不需要每次都创建
提升对线程的管理能力:统一对线程分配和监控,避免无限创建,造成资源内存溢出和CPU耗尽
提高响应,降低系统开销:减少了创建线程的时间消耗,提高应对任务的响应
线程空间大小
线程空间大小和具体JDK版本有很大关系,JDK8将近1.9M、JDK11差不多1.5M多。具体大小的查看可以执行
命令 java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -XX:+PrintNMTStatistics -version 。
C:\Users\WONGS> java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -XX:+PrintNMTStatistics -version java version "11.0.2" 2019-01-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode) Native Memory Tracking: Total: reserved=7849030KB, committed=465994KB - Java Heap (reserved=6248448KB, committed=391168KB) (mmap: reserved=6248448KB, committed=391168KB) - Class (reserved=1056866KB, committed=4578KB) (classes #472) ( instance classes #407, array classes #65) (malloc=98KB #502) (mmap: reserved=1056768KB, committed=4480KB) ( Metadata: ) ( reserved=8192KB, committed=4096KB) ( used=3120KB) ( free=976KB) ( waste=0KB =0.00%) ( Class space:) ( reserved=1048576KB, committed=384KB) ( used=297KB) ( free=87KB) ( waste=0KB =0.00%) - Thread (reserved=16455KB, committed=591KB) (thread #16) (stack: reserved=16384KB, committed=520KB) (malloc=52KB #89) (arena=19KB #30) ......
2. 几种常见线程池 newCachedThreadPool :数量无上限,该线程池会根据需要创建,但是优先使用之前构造的线程。这些池
通常将提高执行许多短期异步任务的程序的性能,如果没有可用的现有线程,则将创建一个新线程并将其
添加到池中。当60S内未使用的线程将被终止并从缓存中删除。 因此,保持空闲时间足够长的池不会消耗
任何资源。
构造函数 :
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } newFixedThreadPool :数量固定大小,该线程池重用在共享的无边界队列上运行的固定数量的线程。在任
何时候,最多nThreads(构造函数的参数, 核心线程数与最大线程数相等 )个线程都是活动的处理任务。
如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到某个线程可用为止。 如
果在关闭之前执行过程中由于执行失败导致任何线程终止,则在执行后续任务时将使用新线程代替。 池中
的线程将一直存在,直到明确将其关闭。
构造函数 : public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } newSingleThreadExecutor :单线程,保证提交线程执行任务的FIFO, (但是请注意,如果该单个线程由
于在关闭前执行期间由于执行失败而终止,则在需要执行新任务时将使用新线程代替。),在任何给定时
间活动的任务不超过一个。与newFixedThreadPool不同,保证返回的执行程序不可重新配置为使用其他
线程。
构造函数 : public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); } newScheduledThreadPool :该线程池可以安排命令在给定的延迟后运行或定期执行。
构造函数 : public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
|