线程池-Executor的设计概览

2020-08-06  本文已影响0人  rock_fish

Executor

此接口将任务任务的具体执行实现 分离;不同的策略就有不同的具体实现。
任务类型为Runnable,忽略任务结果。
从注释中可知,实际执行任务的线程可以是以下情况:

  1. 新线程
  2. 线程池
  3. 调用者线程
public interface Executor {

    /**
     * Executes the given command at some time in the future.  The command
     * may execute in a new thread, in a pooled thread, or in the calling
     * thread, at the discretion of the {@code Executor} implementation.
     */
    void execute(Runnable command);
}

ExecutorService

1. Callable任务

通过submit扩展了Executor,可操作的任务类型Callable,可通过Future.get()以阻塞的方式获取任务结果。

public interface ExecutorService extends Executor{
    <T> Future<T> submit(Callable<T> task);
    <T> Future<T> submit(Runnable task, T result);
    Future<?> submit(Runnable task);
}
2.可关闭、终止

默认情况下,线程池中的线程是非守护线程,在线程池不在需要的时候,需要手动的关闭,调用shutdown或者shutdownNow方法,通过isShutdown来判断是否已关闭。等待终止awaitTermination,判断是否终止状态isTerminated

AbstractExecutorService

抽象类,实现ExecutorService,提供了几个方法的具体实现。

ThreadPoolExecutor

提供了线程池执行器的具体实现。

public class ThreadPoolExecutor extends AbstractExecutorService
上一篇 下一篇

猜你喜欢

热点阅读