谈谈Java的线程池设计
在实际项目中,如果因为想异步执行暂时性的任务而不断创建线程是很浪费资源的事情(当一个任务执行完后,线程也没用了)。这种情况下,最好是将任务提交给线程池执行。 所谓池,就是将管理某一种资源,对资源进行复用的对象。线程池就是对线程管理的对象。 本文就是介绍线程池内部是如何管理线程,并复用线程的。 相关接口 JDK在内部对线程池提供了大致四层的接口(类)用来提供线程池的行为,分别是顶层接口 Executor (这个接口可以理解为执行器,负责执行任务,),可关闭的执行器 ExecutorService (这个接口开始才具备线程池的概念),提供线程池基本框架的抽象类 AbstractExecutorService ,以及线程池的具体实现 ThreadPoolExecutor 。 Executor /** * 线程池顶层接口 * 可以执行提交的命令 */ public interface Executor { /** * 执行提交的命令 * @param command */ void execute(Runnable command); } Executor 只定义了线程池一个行为 execute() 方法,负责执行提交的任务。 ExecutorService package java.util.concurrent; import java.util.List; import java