最近在面试程序员的时候,总逃不开聊到线程池;我一般会问三个问题,各位看看自己是否需要继续往下看;
【问题1】:当一个任务提交给线程池,线程池的构造参数是怎么协作把任务最终给处理的?
【问题2】:非核心线程消亡时间,是怎么做到让非核心线程到达一定时间自动消亡的?
【问题3】:如果想改变线程池的判断顺序,先判断最大线程在放任务队列,有什么办法?
今天我们主要围绕这三个问题,聊聊线程池;
我们都知道,线程池ThreadPoolExecutor构造函数有7个参数:
1.corePoolSize 核心线程数
2.maximumPoolSize 最大线程数
3.workQueue 任务队列
4.keepAliveTime 非核心线程允许的空闲时间
5.unit 空闲时间单位
6.threadFactory 线程工厂
7.handler 拒绝策略
当一个任务提交给线程池,会进行以下步骤:
第一步:判断当前线程池中的线程数是否小于核心线程数,小于核心线程数,直接创建线程执行任务,否则,下一步
第二步:判断当前队列是否已满(Offer)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。