ExecutorService 的理解与使用
2017-09-21 21:46
369 查看
接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现。
首先使用 newFixedThreadPool() 工厂方法创建壹個 ExecutorService ,上述代码创建了壹個可以容纳10個线程任务的线程池。其次,向 execute() 方法中传递壹個异步的 Runnable 接口的实现,这样做会让 ExecutorService 中的某個线程执行这個 Runnable 线程。
任务的委托(Task Delegation)
下方展示了一个线程的把任务委托异步执行的ExecutorService的示意图。
壹旦线程把任务委托给 ExecutorService,该线程就会继续执行与运行任务无关的其它任务。
ExecutorService 的实现
Callable 的返回值可以从方法 submit(Callable) 返回的 Future 对象中获取。如下是壹個 ExecutorService Callable 的样例:
ExecutorService 样例
这里有壹個简单的使用Java 实现的 ExectorService 样例:ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.execute(new Runnable() { public void run() { System.out.println("Asynchronous task"); } }); executorService.shutdown();
首先使用 newFixedThreadPool() 工厂方法创建壹個 ExecutorService ,上述代码创建了壹個可以容纳10個线程任务的线程池。其次,向 execute() 方法中传递壹個异步的 Runnable 接口的实现,这样做会让 ExecutorService 中的某個线程执行这個 Runnable 线程。
任务的委托(Task Delegation)
下方展示了一个线程的把任务委托异步执行的ExecutorService的示意图。
壹旦线程把任务委托给 ExecutorService,该线程就会继续执行与运行任务无关的其它任务。
ExecutorService 的实现
execute(Runnable) submit(Runnable) submit(Callable) invokeAny(...) invokeAll(...)
Future future = executorService.submit(new Runnable() { public void run() { System.out.println("Asynchronous task"); } }); //如果任务结束执行则返回 null System.out.println("future.get()=" + future.get());
submit(Callable)
方法 submit(Callable) 和方法 submit(Runnable) 比较类似,但是区别则在于它们接收不同的参数类型。Callable 的实例与 Runnable 的实例很类似,但是 Callable 的 call() 方法可以返回壹個结果。方法 Runnable.run() 则不能返回结果。Callable 的返回值可以从方法 submit(Callable) 返回的 Future 对象中获取。如下是壹個 ExecutorService Callable 的样例:
Future future = executorService.submit(new Callable(){ public Object call() throws Exception { System.out.println("Asynchronous Callable"); return "Callable Result"; } }); System.out.println("future.get() = " + future.get());
相关文章推荐
- Java多线程(7)——ExecutorService 的理解与使用
- 理解java多线程中ExecutorService使用
- ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- java多线程核心接口 — ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- ExecutorService 的理解 4000 与使用
- ExecutorService理解与使用
- ExecutorService理解与使用
- ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- Java线程池ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- ExecutorService 的理解与使用
- Java笔记->ExecutorService 的理解与使用
- ExecutorService 的理解与使用