码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程—Executor框架概述

时间:2015-07-05 09:34:54      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:java   多线程   thread   executor   

1. 任务Task相关的接口与类

1.1 Runnable

表示一个可被执行的命令,通常用于在不同线程中执行任务。

package java.lang;

public interface Runnable {
    public void run();
}

1.2 Callable<V>

表示一个有返回结果的任务

package java.util.concurrent;

public interface Callable<V> {
    V call() throws Exception;
}

1.3 Future<V>

表示一个异步任务的结果。

package java.util.concurrent;

public interface Future<V> {

    /**
     * 取消任务的执行。
     * 以下几种情况不能成功取消任务:
     * 1.任务已完成。 2.任务已经被取消。 3.任务因为某些原因不能被取消。
     *
     * 如果成功过,任务将不会执行。
     * 如果任务已经启动,参数mayInterruptIfRunning将决定执行任务线程是否应该被中断,已达到停止任务的目的。
     *
     * 该方法返回后,isDone()将总是返回true。
     * 如果该方法返回true,isCanelled()将返回true。
     */
    boolean cancel(boolean mayInterruptIfRunning);

    /**
     * 返回true表示任务在完成前被取消。
     */
    boolean isCancelled();

    /**
     * 返回true表示任务完成
     *
     * 任务完成可能原因如下:
     * 1.正常执行完成 2.异常 3.被取消
     */
    boolean isDone();

    /**
     * 等待任务的完成,并返回结果。
     *
     * @return 返回任务执行结果
     * @throws CancellationException 当任务被取消时
     * @throws ExecutionException 当任务执行出现异常时
     * @throws InterruptedException 等待过程中线程被中断时
     */
    V get() throws InterruptedException, ExecutionException;

    /**
     * 在指定时间内等待任务的完成,并返回结果。
     *
     * @param 等待超时最长时间
     * @param 时间单位
     * @return 返回任务执行结果
     * @throws CancellationException 当任务被取消时
     * @throws ExecutionException 当任务执行出现异常时
     * @throws InterruptedException 等待过程中线程被中断时
     * @throws TimeoutException 等待超时
     */
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

1.4 RunnableFuture<V>

该接口继承于Runnable和Future。

package java.util.concurrent;

public interface RunnableFuture<V> extends Runnable, Future<V> {
    void run();
}

1.5 FutureTask<V>

一个可以取消的异步任务。该类实现了RunnableFuture接口。

2. Executor框架

2.1 Executor

Executor负责执行提交的Runnable任务。这个接口提供了一种将任务提交和任务执行解耦的机制。Executor通常用于代替显示创建线程。

package java.util.concurrent;

public interface Executor {
    void execute(Runnable command);
}

2.2 ExecutorService

该接口继承于Executor接口。提供了管理声明周期的方法和提交任务的便利方法。

public interface ExecutorService extends Executor {

    void shutdown();

    List<Runnable> shutdownNow();

    boolean isShutdown();

    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;
}

2.3 Executors

Executors为一个静态工厂,用于生产Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable。

package java.util.concurrent;

public class Executors {

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

    public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1));
    }

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }

    public static ThreadFactory defaultThreadFactory() {
        return new DefaultThreadFactory();
    }

    public static ThreadFactory privilegedThreadFactory() {
        return new PrivilegedThreadFactory();
    }

    public static <T> Callable<T> callable(Runnable task, T result) {
        if (task == null)
            throw new NullPointerException();
        return new RunnableAdapter<T>(task, result);
    }

    public static Callable<Object> callable(Runnable task) {
        if (task == null)
            throw new NullPointerException();
        return new RunnableAdapter<Object>(task, null);
    }

    /** Cannot instantiate. */
    private Executors() {}
}

3. UML类图

技术分享

版权声明:本文为博主原创文章, 转载请标明出处http://blog.csdn.net/sun927

Java多线程—Executor框架概述

标签:java   多线程   thread   executor   

原文地址:http://blog.csdn.net/sun927/article/details/46760527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!