标签:
实现Callable<T>接口 :有泛型 实现call方法 有返回值 可以抛出异常
1 定义一个类实现Callable接口 可以指定泛型
2 实现call方法 有返回值 返回值类型是指定的泛型类型
3 使用Executors工厂获取ExecutorService线程池
4 将Callable子类实例交给ExecutorService的submit方法 并获取Future对象
5 调用Future对象get方法 获取线程执行结果
6 ExecutorService调用shutdown方法关闭线程池
案例:
public class MyCallable implements Callable<Integer> { private int number; public MyCallable(int number) { this.number = number; } public Integer call() throws Exception { int sum = 0; for (int x = 1; x <= number; x++) { sum += x; } return sum; } } public class CallableDemo { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService pool = Executors.newFixedThreadPool(2); Future<Integer> f1 = pool.submit(new MyCallable(100)); Future<Integer> f2 = pool.submit(new MyCallable(200)); Integer i1 = f1.get(); Integer i2 = f2.get(); System.out.println(i1); System.out.println(i2); pool.shutdown(); } }
Callable 和Runnable 区别:
Callable可以返回值,返回值类型通过泛型知指定,可以抛出异常
Runnable启动线程的方法通常为start,而Callable需要使用ExecutorService submit 方法。
关于ExecutorService的知识在后面线程池中讲述
标签:
原文地址:http://www.cnblogs.com/wihainan/p/4760910.html