一、如何实现线程池?
- 线程池中的线程抽象为一个静态内部类Worker,基于AQS实现,存储在HashSet < Worker >workers成员变量中
- 需要执行的任务存放在成员变量workQueue中,从workQueue取出放入workers中进行处理
二、线程池的参数有哪些?
- 最大核心线程数
- 最大线程数
- 最大空闲时间
- 任务队列大小
三、线程池中的线程是怎么创建的?
execute添加一个任务时
- 小于核心线程数,马上创建线程执行
- 大于等于核心线程数,放入队列
- 队列满了,小于最大线程数,创建线程执行
- 大于等于最大线程数,抛出异常
- 超过最大核心线程数的,空闲超过一定时间后回收,缩回到最大核心线程数大小
四、线程池类型有哪些?
- SingleThreadExecutor,1、1、0、无界
- FixedThreadPool,n、n、0、无界
- CachedThreadPool,0、int最大、60、1
- ScheduledThreadPool,corePoolSize、int最大、DEFAULT_KEEPALIVE_MILLIS、new DelayedWorkQueue()