线程池的三大类型、七大参数和四大拒绝策略
- 三大方法
当任务之间存在依赖关系,或需要严格保证执行顺序时,单线程池是理想选择。例如日志的写入工作,我希望日志可以按照时间顺序进行写入。- 线程池用完需要手动关闭,否则程序不会退出
- 线程池中平时运行的线程是核心线程,当阻塞队列满了之后,如果设置的最大线程数是大于核心线程数的才会继续开辟新的线程,让新的线程加入到任务处理的行列
- 四大拒绝策略:队列满了抛出异常、队列满了不抛出异常、调用提交任务的线程执行、尝试移除最旧的任务并加入新的线程,如果失败就丢弃当前任务,也不会抛出异常
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// 固定线程池源码
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(
nThreads, // 核心线程数(corePoolSize)
nThreads, // 最大线程数(maximumPoolSize)
0L, // 非核心线程的空闲线程存活时间(keepAliveTime)
TimeUnit.MILLISECONDS, // 时间单位
new LinkedBlockingQueue<Runnable>() // 任务队列 );
}
// 单线程线程池
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService(
new ThreadPoolExecutor(
1, //核心线程数=1,
1, // 最大线程数=1(单线程)
0L,// 非核心线程的空闲线程存活时间(同固定线程池逻辑,此处无效)
TimeUnit.MILLISECONDS, // 时间单位
new LinkedBlockingQueue<Runnable>() // 任务队列
)
);
}
// 可伸缩线程池
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
//SynchronousQueue 是一个没有实际存储空间的阻塞队列,
/**`SynchronousQueue` 之所以被用于可伸缩线程池,是因为它不缓存任务、强制任务直接传递**的特性,完美适配了该线程池 “动态创建线程处理新任务、无任务时自动收缩” 的核心需求,确保了对突发任务的快速响应能力。*/
四大函数式接口
函数式接口
只要一个接口式函数式接口,就可以通过lambda表达式简写
断定型接口
只有一个传入参数,返回值是布尔类型!
供给型接口
没有输入只有返回值
消费型接口
只有输入没有返回值
你了解过Java的流式计算吗,能否展开讲讲
好的,下面我详细介绍一个流式计算,流式计算的API主要分为三类,第一类是获取流的API主要分为集合获取流和数组获取流。下面是代码:
// 如果是集合就.stream(),如果是数组就Arrays.stream();
// 集合获取流
List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numList.stream(); // 串行流
// Stream<Integer> parallelStream = numList.parallelStream(); // 并行流
// 数组获取流
Integer[] numArr = {1, 2, 3, 4, 5};
Stream<Integer> arrStream = Arrays.stream(numArr);
中间操作主要有filter过滤操作,map数据格式转换操作,sorted排序操作,skip跳过前面n个元素,limit截取前面n个元素。
终端操作包括forEach,count统计元素个数,max获取最大值,min获取最小值,anyMatch是否有一个满足条件的元素,allMatch是否所有的元素都满足条件。collect将元素收集到指定容器(如列表、集合、Map)