10、为什么要使用线程池
统一管理资源 节省了资源的开销(不需要重复的创建和销毁)
11、线程池的执行流程
1、判断线程池中是否有核心线程 如果有直接使用核心线程执行任务
2、判断队列是否已满,如果没有满进入到队列中排队
3、如果队列满了使用非核心线程执行任务
4、如果非核心线程也满了 直接执行拒绝策略
12、线程池的核心参数
1、核心线程数
2、最大线程数 = 非核心线程数+核心线程数
3、非核心线程的存活时间
4、非核心线程的存活时间单位
5、队列
6、拒绝策略
7、线程工厂
13、线程池的拒绝策略有哪些
1. AbortPolicy:(默认) 丢弃任务并抛出RejectedExecutionException异常
2. DiscardPolicy:丢弃任务,但是不抛出异常
3. DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务
4. CallerRunsPolicy:只要线程池没有关闭,就由提交任务的当前线程处理
14、了解 Executors 创建线程池吗
我知道它是可以创建线程池的,但是我们项目中不用
项目中用的是Spring带的那个ThreadPoolTaskExecutor
15、如何确定线程池的核心线程数
取决于任务是CPU密集型还是IO密集型
CPU密集型:服务器的核数
IO密集型: 服务器的核数*2
16、CountDownLatch 的作用是什么
可以控制一些线程执行完成后再执行其他的业务
17、 volatile 关键字的作用是什么
volatile保证线程之间数据可见
可以防止指令重排
推荐阅读:
文章有(0)条网友点评