Callable接口,开启线程

我们知道

new Thread().start()//这是有且只有唯一启动线程的方法

查看Thread()源码

    public Thread(Runnable target, String name) {
        init(null, target, name, 0);
    }

发现需要的参数是Runnable类型

那么我们现在要做的就是怎么把Callable和Runnable连接起来,
查看JDK文档
image
image

实现

package com.luoKing.Callable;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/*
*
* 使用Runnable的实现类FutureTask来连接Callable接口
*
* */
public class callableTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask futureTask = new FutureTask(new call());//使用Runnable的实现类FutureTask来连接Callable接口
        new Thread(futureTask,"A").start();//启动线程的唯一方式
        new Thread(futureTask,"B").start();//callable有缓存

        String result = (String)futureTask.get();//由于要拿到运算结果,所以这里会发生阻塞
        System.out.println(result);
    }
    
}

class call implements Callable<String>{
    @Override
    public String call() throws Exception {
        System.out.println("1024");
        return "call()";
    }
}
posted @ 2022-05-02 20:46  小罗要有出息  阅读(151)  评论(0编辑  收藏  举报