线程池:一种线程使用模式。线程过多会带来调度开销。
一池N线程
Executors.newFixedThreadPool(int)
一个任务一个任务执行,一池一线程
Executors.newSingleThreadExecutor()
线程池根据需求创建线程,可扩容,遇强则强
Executors.newCachedThreadPool()
实际开发中不会使用上面三种方式创建
线程池7个参数
线程池的创建底层都是调用了如下方法
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), defaultHandler);}
各个参数的意思



JDK内置的拒绝策略
自定义线程池
package com.daijunyi.pool;import java.util.Random;import java.util.concurrent.*;public class PoolTest {public static void main(String[] args) {ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2,5,2L,TimeUnit.SECONDS,new ArrayBlockingQueue<>(3),Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());try {for (int i=0;i<20;i++){threadPoolExecutor.execute(()->{System.out.println(Thread.currentThread().getName()+"执行");try {TimeUnit.SECONDS.sleep(new Random().nextInt(2));} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"完成----");});}}finally {//执行完毕关闭线程池threadPoolExecutor.shutdown();}}}
