使用Callable和FutureTask创建线程

来源:互联网 发布:莫文蔚周星驰知乎 编辑:程序博客网 时间:2024/06/06 05:45

  使用Callable和FutureTask,可以实现有返回值的线程创建,并且可以抛出异常:

package concurrent;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;class CallableDemo implements Callable<Integer> {    @Override    public Integer call() throws Exception {        // 计算1-100的和        int sum = 0;        for (int i = 1; i <= 100; i++)            sum += i;        return sum;    }}public class TestCallable {    public static void main(String[] args) {        CallableDemo cd = new CallableDemo();        // 使用Callable方式创建线程,需要FutureTask类的支持,用于接收运算结果,可以使用泛型指定返回值的类型        FutureTask<Integer> result = new FutureTask<>(cd);        new Thread(result).start();        int sum = 0;        // 接收运算结果        // 只有当该线程执行完毕后才会获取到运算结果,等同于闭锁的效果        try {            sum = result.get();        } catch (InterruptedException e) {            e.printStackTrace();        } catch (ExecutionException e) {            e.printStackTrace();        }        System.out.println("sum is " + sum);    }}
0 0
原创粉丝点击