前面介绍了Java并发包提供的三种线程池,它们用处各不相同,接下来介绍一些工具类,对这三种线程池的使用。
Executors
Executors是JDK1.5就开始存在是一个线程池工具类,它定义了用于Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable的工厂和工具方法。在开始之前,先了解一下它提供的一些内部类:
DelegatedExecutorService、DelegatedScheduledExecutorService、FinalizableDelegatedExecutorService
1 //只暴露实现ExecutorService接口的方法的包装器类。Delegated 是代理,委托的意思 2 static class DelegatedExecutorService extends AbstractExecutorService { 3 private final ExecutorService e; 4 5 //构造器传入一个ExecutorService实例 6 DelegatedExecutorService(ExecutorService executor) { e = executor; } 7 8 ..... 9 } 10 11 //可自动终结的包装线程池,FinalizableDelegatedExecutorService的实例即使不手动调用shutdown方法关闭现称池,虚拟机也会帮你完成此任务 12 static class FinalizableDelegatedExecutorService extends DelegatedExecutorService { 13 14 FinalizableDelegatedExecutorService(ExecutorService executor) { 15 super(executor); 16 } 17 18 //finalize方法会在虚拟机gc清理对象时被调用 19 protected void finalize() { 20 super.shutdown(); 21 } 22 } 23 24 25 //只暴露实现ScheduledExecutorService的接口方法的一个包装器类。 26 static class DelegatedScheduledExecutorService extends DelegatedExecutorService implements ScheduledExecutorService { 27 private final ScheduledExecutorService e; 28 29 //构造器传入一个ScheduledExecutorService实例 30 DelegatedScheduledExecutorService(ScheduledExecutorService executor) { 31 super(executor); 32 e = executor; 33 } 34 //..... 35 }