Callable接口

发布时间 2023-12-02 21:44:35作者: 林浅

使用Runnable,Thread实现的线程都无法返回结果。

而Callable创建的线程可以,

start 异步执行 当子线程还未执行完  主线程运行到 get方法 会等待子线程执行完

package org.example.test1;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
@Slf4j
public class Callable<I extends Number> {
    public static void main(String[] args) {

        //使用FutureTask类来包装Callable,可以创建匿名对象
        FutureTask<Integer> futureTask = new FutureTask<Integer>(()->{
            System.out.println("子线程运行中");
            return 5;
        });
        // 使用Future Task对象作为Thread对象的target创建,并启动新线程
        new Thread(futureTask).start();
        try {
            Integer integer = futureTask.get();
            System.out.println("返回值"+integer);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } catch (ExecutionException e) {
            throw new RuntimeException(e);
        }

    }
}