Callable接口实现多线程的方式

通过Callable接口实现多线程

  1. 实现Callable重写call方法
  2. 实现Callable和实现Runnable类似,但是功能更强大,具体表现在
  3. 可以在任务结束后提供一个返回值,Runnable不行
  4. call方法可以抛出异常,Runnable的run方法不行
  5. 可以通过运行Callable得到的Fulture对象监听目标线程调用call方法的结果,得到返回值,(fulture.get(),调用后会阻塞,直到获取到返回值)

Callable接口介绍:

(1)java.util.concurrent.Callable是一个泛型接口,只有一个call()方法

(2)call()方法抛出异常Exception异常,且返回一个指定的泛型类对象

Callable接口实现多线程的应用场景

(1)当父线程想要获取子线程的运行结果时

使用Callable接口实现多线程的步骤

  1. 第一步:创建Callable子类的实例化对象
  2. 第二步:创建FutureTask对象,并将Callable对象传入FutureTask的构造方法中
    (注意:FutureTask实现了Runnable接口和Future接口)
  3. 第三步:实例化Thread对象,并在构造方法中传入FurureTask对象
  4. 第四步:启动线程

代码示例:

public class MyThread implements Callable<String> {
     
    @Override
    public String call() throws Exception {
     
        return getMessage();
    }


    public String getMessage() throws InterruptedException {
     
        Thread.sleep(2000);
        return "我是返回的信息";
    }
}

class MyTest {
     

    public static void main(String[] args) throws ExecutionException, InterruptedException {
     
        MyThread myThread = new MyThread();
        // 构造参数需要传入一个callalbe接口的参数
        FutureTask<String> futureTask = new FutureTask(myThread);
        // FutureTask实现了Runalble接口
        new Thread(futureTask).start();
        String s = futureTask.get();
        System.out.println(s);
    }
}

运行结果:

我是返回的信息

你可能感兴趣的:(JUC并发)