怎么才算掌握了JDK中的线程池
JDK并发包下面的线程池是面试中经常被考查的点
今天,我来谈谈自己觉得ThreadPoolExecutor哪些点是应该掌握的,这些点应该掌握的点正是面试中经常被问的东西。现在抛出几个问题,如果你都能答上来,可以不用往下面看啦。
- ThreadPoolExecutor中常用参数有哪些,作用是什么?任务提交后,ThreadPoolExecutor会按照什么策略去创建线程用于执行提交任务?
- ThreadPoolExecutor有哪些状态,状态之间流转是什么样子的?
- ThreadPoolExecutor中的线程哪个时间点被创建?是任务提交后吗?可以在任务提交前创建吗?
- ThreadPoolExecutor中创建的线程哪个时间被启动?
- ThreadPoolExecutor竟然是线程池那么他是如何做到重复利用线程的?
- ThreadPoolExecutor中创建的同一个线程同一时刻能执行多个任务吗?如果不能是通过什么机制保证ThreadPoolExecutor中的同一个线程只能执行完一个任务,才会机会去执行另一个任务?
- ThreadPoolExecutor中关闲线程池的方法shutdown与shutdownNow的区别是什么?
- 通过submit方法向ThreadPoolExecutor提交任务后,当所有的任务都执行完后不调用shutdown或shutdownNow方法会有问题吗?
- ThreadPoolExecutor有没有提供扩展点,方便在任务执行前或执行后做一些事情?
如果回答的上就pass吧,哈哈
ThreadPoolExecutor参数有哪些与创建线程策略?
ThreadPoolExecutor参数
- corePoolSize 线程池中的核心线程数
- mmaximumPoolSize 线程池中的最大线程数
- keepAliveTime 当线程池中线程数量超过corePoolSize时,允许等待多长时间从workQueue中拿任务
- unit keepAliveTime 对应的时间单位,为TimeUnit类。
- workQueue 阻塞队列,当线程池中线程数超过corePoolSize时,用于存储提交的任务。
- threadFactory 线程池采用,该线程工厂创建线程池中的线程。
- handler 为RejectedExecutionHandler,当线程线中线程超过maximumPoolSi