相关类Executor,Executors,AbstractExecutorService,ExecutorService框架
Executor整个线程池执行者框架的顶层接口spa
public interface Executor {线程
void execute(Runnable command);
}orm
ExecutorService 定义了不少的方法:对象
public interface ExecutorService extends Executor {继承
void shutdown();接口
List<Runnable> shutdownNow();it
boolean isShutdown();io
boolean isTerminated();变量
boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
throws InterruptedException;
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,long timeout, TimeUnit unit)
throws InterruptedException;
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
throws InterruptedException, ExecutionException;
<T> T invokeAny(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
AbstractExecutorService是一个抽象类,它实现了ExecutorService接口的submit,invokeAll的方法
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Runnable task, T result) {
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task, result);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Callable<T> task) {
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task);
execute(ftask);
return ftask;
}
在这里,全部submit方法提交的任务最终仍是调用了execute方法,execute是接口Executor中定义的方法,AbstractExecutorService没有实现它,
须要子类去实现这个方法,ThreadPoolExecutor继承了AbstractExecutorService,它实现了execute方法。ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,并覆盖了ThreadPoolExecutor的execute方法。这个方法是线程执行框者架的核心逻辑,不一样的线程池执行者有不一样的实现逻辑。
ThreadPoolExecutor线程池执行者:它有一个核心的成员变量:
private final HashSet<Worker> workers = new HashSet<Worker>();
workers能够看作是ThreadPoolExecutor中用于运行任务的线程池。
worker是一个封装了一个Thread对象并实现了Runnable接口的类。封装Thread很容易理解,由于它要利用Thread去运行execute方法提交过来的runnable任务