原创

第五篇 : 创建执行线程的方式三 实现 Callable 接口


简介

Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口

  • Callable 接口类似于 Runnable,两者都是为那些其实例可 能被另一个线程执行的类设计的。但是 Runnable 不会返回结果并且无法抛出经过检查的异常
  • Callable 需要依赖FutureTask ,Future.get取决于任务的状态,如果任务已完成,那么get会立即返回结果,否则get将阻塞直到任务进入完成状态,然后返回结果或者抛出异常,其实和我们上一节将的CountDownLatch一样,它也是一种闭锁的实现

一、实例

package com.gf.demo;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 一、创建线程的方式三:实现Callable接口。相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常。
 * 
 * 二、执行Callable 方式,需要FutureTask 实现类的支持,用于接受运算结果。FutureTask 是Future接口的实现类
 *
 */
public class TestCallable {
    
    public static void main(String args[]){
        ThreadDemo td = new ThreadDemo();
        FutureTask<Integer> result = new FutureTask<>(td);
        new Thread( result ).start();

        try {
            Integer sum = result.get();
            System.out.println(sum);
            System.out.println("--------------------------------");
        } catch (ExecutionException | InterruptedException e) {
            e.printStackTrace();
        }

    }
    
}

class ThreadDemo implements Callable<Integer> {
	
	/**
	 * call()可以抛出异常,而run()不可以
	 */
    @Override
    public Integer call() throws Exception {
        int num = 0;
        for (int i = 0 ; i < Integer.MAX_VALUE ; i++) {
            num = num + i;
        }
        return num;
    }
}

juc
  • 作者:程序员果果
  • 发表时间:2018-11-02 09:19
  • 版权声明:自由转载-非商用-非衍生-保持署名 (创意共享4.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论