【多线程】多线程的四种实现方式——基于Callable和FutureTask实现

1.首先我们写一个类实现Callable接口:

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

&&需要对比实现Runnable接口的区别:

1.重写call()方法;

2.有返回值;

3.需要抛出异常。

 

2.通过查看官方文档我们发现,创建线程只能传入实现了Runable接口的类的对象,并没有重载实现Callable接口的。

因此我们可以想到要找一个中间人,去连接Callable接口和Thread,这里其实是使用了适配器模式的设计思想,这个中间人就是FutureTask。

FutureTask的继承关系图如下所示:

3.在main主线程调用创建的新线程

public class CallableDemo{
    public static void main(String[] args){
        //FutrueTask作为中间人(适配器)接受实现Callable的类对象,返回实现Runnable接口的类对象
        FutureTask futureTask = new FutureTask(new MyThread());
        //因为FutrueTask实现了Runnable接口,就跟Runnable接口一样传入Thread中构造即可
        new Thread(futureTask,"A").start();
    }
}

1.FutrueTask作为中间人(适配器)接受实现Callable的类对象,返回实现Runnable接口的类对象;

2.因为FutrueTask实现了Runnable接口,就跟Runnable接口一样传入Thread中构造即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值