1、概述
1.1 JDK1.5后,Java提供了Callable接口,该接口提供一个call方法作为线程执行体,该call方法可以 有返回值、声明抛出异常;
因此,我们可以直接将Callable接口作为target来创建线程,但是:Callable接口是新增的接口,不是Runnable的实现类;
JDK1.5后又提供了Future接口,并提供Future接口的实现类FutureTask(该类实现了Runnable接口,可以作为Thread的target);
1.2 创建、启动有返回值的线程:
1.2.1 创建Callable接口的实现类,实现call方法;
1.2.2 创建实现类的实例,并用FutureTask进行封装;
1.2.3 使用FutureTask的实例作为Thread的target创建Thread实例、调用start()开启线程;
1.2.4 调用FutureTask实例的方法来获得子线程执行后的返回值;
package com.an; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class CallableImpl implements Callable { /** * 线程执行体 * @return * @throws Exception */ public Object call() throws Exception { int i=0; for (;i<10;i++){ } return i; } public static void main(String[] args)throws Exception{ for (int i=0;i<30;i++){ System.out.println(Thread.currentThread().getName()+"="+i); if (i==5){ FutureTask futureTask=new FutureTask(new CallableImpl()); Thread thread=new Thread(futureTask,"有返回值的线程"); thread.start(); thread.join(); System.out.println(futureTask.get()); } } } }