JavaSE---多线程---Callable、Future

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());
            }
        }

    }
}

  

猜你喜欢

转载自www.cnblogs.com/anpeiyong/p/11023507.html