这道题其实就是在问java中线程池的实现类ThreadPoolExecutor,这个类参数最多的构造方法有7个参数。
线程池本质上就是管理一组线程,用来执行提交给线程池的任务。提交任务用的是submit(task)。
corePoolSize设置核心线程数。核心线程执行完任务后仍然需要保留在线程池中的,救急线程执行完没啥用了就不需要保存在线程池中。
核心线程数可以为0,也就是说可以执行完任务都不保留在池中。
workqueue用来缓冲任务,当核心线程都在忙的时候,新来的任务就加到workqueue中。等到有空闲下来的核心线程,就从任务队列中获取任务。
任务队列是有上限的(如果没有上限就会造成内存紧张),核心线程也是有上限的,如果这两个都满了,新来的任务怎么办呢?这时候就交由救急线程来执行。
keepAliveTime生存时间和unit时间单位都是用来控制救急线程的,单位可以秒或毫秒。在这个时间范围内救急线程没有任务可以执行,就把他从线程池中去掉。
当workqueue、核心线程和救急线程都已经满了,再来的新任务怎么办?这时候就要用到handler拒绝策略,是踢掉,报异常,还是替换掉队列中的任务,还是什么都不做。
threadFatory线程工厂不太重要,就是为线程在创建时起名字的。