ExecutorService

public interface ExecutorService extends Executor

为Executor提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成Future的方法。可以关闭ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭ExecutorService。shutdown()方法在终止前允许执行以前提交的任务,而shutdownNow()方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。应该关闭未使用的ExecutorService以允许回收其资源。

通过创建并返回一个可用于取消执行和/或等待完成的Future,方法submit扩展了基本方法Executor.execute(java.lang.Runnable)。方法invokeAny和invokeAll是批量执行的最常用形式,它们执行任务 collection,然后等待至少一个,或全部任务完成(可使用ExecutorCompletionService类来编写这些方法的自定义变体)。

public class Executors extends Object
此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。可用来创建线程池。

示例:

package com.zero.test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ExecutorServiceTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ExecutorService service = Executors.newFixedThreadPool(3);
        Runnable runnable = new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("Runnable...");
            }
        };
        Callable<String> callable = new Callable<String>() {
            @Override
            public String call() throws Exception {
                // TODO Auto-generated method stub
                System.out.println("Callable...");
                return "callable";
            }
        };

        Future future1 = service.submit(runnable);
        Future future2 = service.submit(runnable, "ok...");
        Future future3 = service.submit(callable);
        service.execute(runnable);// Executor的方法,建议使用ExecutorService.submit()

        service.shutdown();// 关闭service,不能继续添加任务
        try {
            System.out.println(future1.get());//null
            System.out.println(future2.get());//ok
            System.out.println(future3.get());//callable
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(ExecutorService)