前面介绍了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 }
View Code

相关文章: