线程属于稀缺资源,对于线程的创建规则,引用《阿里巴巴 Java 手册》中的一条进行说明。
本篇从源码方面介绍ThreadPoolExecutor对象,并简要解析线程池工作原理。
首先ThreadPoolExecutor中定义了几个线程池状态常量。
看一下构造方法的参数
这里可以简单看下JDK中已有的4种饱和策略handler:
也可以自定义饱和策略,只需实现RejectedExecutionHandler接口。
再看一下JDK中的workQueue队列:
JDK提供了Executors工厂类。这里面有几种实例化线程池的方法:
指定了线程数,且corePoolSize == maximumPoolSize。
可缓存线程池。最大线程数达到Integer.MAX_VALUE。所以在使用该线程池时,一定要控制并发数,不然会创建很多线程,占用大量资源。
只有一个线程的线程池,可以保证提交任务的顺序执行。
上面的实例方法都很方便,但是在开发中创建线程池时,最好不好使用Executors类中的初始化方法。见《阿里巴巴 Java 手册》:
最后看一下ThreadPoolExecutor执行任务的方法
以一张简单的流程图描述上面的步骤: