Java多线程—Executor框架概述
来源:互联网 发布:如何关闭mac日历广告 编辑:程序博客网 时间:2024/05/19 16:23
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<V>。
package java.util.concurrent;public interface RunnableFuture<V> extends Runnable, Future<V> { void run();}1.5 FutureTask<T>
一个可以取消的异步任务。该类实现了RunnableFuture<V>接口。
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类图
0 0
- Java多线程—Executor框架概述
- Java多线程—Executor框架
- java多线程---Executor框架
- Java多线程——Executor框架
- Java多线程-Executor框架:ScheduledThreadPoolExecutor
- Java多线程-Executor框架:CompletionService
- Java多线程之Executor框架
- Java多线程-Executor框架:CompletionService
- Java-多线程框架Executor解读
- Java多线程-实现多线程:Executor框架
- 【多线程】——Executor框架
- [多线程] java并发编程-Executor框架
- Java多线程之Executor框架(1)
- Java多线程之Executor框架(2)
- 【Java多线程】Executor框架的详解
- Java多线程--异步执行框架Executor
- java——Executor框架
- 多线程之Executor框架
- AOP代理分析
- 理解RESTful架构
- 详解Windows内存分页机制
- 蓝桥杯---算法训练 Anagrams问题
- golang time操作整理
- Java多线程—Executor框架概述
- hdu 2647 Reward
- 机器学习基石笔记11——机器可以怎样学习(3)
- openvpn安装配置常见问题
- Word 2013 中文引号完美解决方案
- 变量和引用
- (1.2.5.3)线索二叉树
- VS编译Lua程序,生成lua.lib
- 由光学到变分演变出来的二阶非线性常微分方程初边值问题