【多线程】多线程的四种实现方式——基于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中构造即可。

 

发布了103 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zzf_forgot/article/details/103196118