一、
从Java 5开始,Java提供了Callable接口。 Callable接口和Runnable相似,但是比Runnable更强大,Runnable不会返回结果,且无法抛出返回结果的异常,而Callable被线程执行后,返回值可以被Future拿到,也就是,Future可以拿到异步执行任务的返回值。
二、例子
package com.Thread.Callable;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
//创建Callable接口的实现类
public class CallableDemo implements Callable<Integer> {
//实现call()方法,该call()方法将作为该线程的执行体,且该call()方法有返回值
@Override
public Integer call() throws Exception {
return new Random().nextInt(100); //随机数生成
}
public static void main(String[] args) throws Exception {
CallableDemo callable=new CallableDemo();//创建CallableDemo对象
FutureTask<Integer> future = new FutureTask<Integer>(callable);// 使用FutureTask来包装Callable对象
Thread thread=new Thread(future);
thread.start();
System.out.println(future.get());
}
}
运行结果:
59