ExecutorService用法详解(补足六个汉字).doc
文本预览下载声明
ExecutorService用法详解
接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现。
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 的实现
由于 ExecutorService 只是壹個接口,你壹量需要使用它,那麽就需要提供壹個该接口的实现。ExecutorService 接口在 java.util.concurrent 包中有如下实现类:
HYPERLINK /java-util-concurrent/threadpoolexecutor.html \t _blank ThreadPoolExecutor
HYPERLINK /java-util-concurrent/scheduledexecutorservice.html \t _blank ScheduledThreadPoolExecutor
创建壹個 ExecutorService
你可以根据自己的需要来创建壹個 ExecutorService ,也可以使用 Executors 工厂方法来创建壹個 ExecutorService 实例。这里有几個创建 ExecutorService 的例子:
ExecutorService executorService1 = Executors.newSingleThreadExecutor();
ExecutorService executorService2 = Executors.newFixedThreadPool(10);
ExecutorService executorService3 = Executors.newScheduledThreadPool(10);
ExecutorService 使用方法
这里有几种不同的方式让你将任务委托给壹個 ExecutorService:
execute(Runnable)
submit(Runnable)
submit(Callable)
invokeAny(...)
invokeAll(...)
我会在接下来的内容里把每個方法都看壹遍。
execute(Runnable)
方法 execute(Runnable) 接收壹個 java.lang.Runnable 对象作为参数,并且以异步的方式执行它。如下是壹個使用 ExecutorService 执行 Runnable 的例子:
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
public void run() {
System.out.println(Asynchronous task);
}
});
executorService.shutdown();
使用这种方式没有办法获取执行 Runnable 之后的结果,如果你希望获取运行之后的返回值,就必须使用 接收 Callable 参数的 execute() 方法,后者将会在下文中提到。
s
显示全部