java线程池

相关类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任务

相关文章
相关标签/搜索