码迷,mamicode.com
首页 > 编程语言 > 详细

03 创建线程的第3式

时间:2015-08-26 17:10:31      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

实现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的知识在后面线程池中讲述

 

 

03 创建线程的第3式

标签:

原文地址:http://www.cnblogs.com/wihainan/p/4760910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!