callable实现多线程

线程的实现方式有三种:

1、extends Thread ,简单方便,但只能单继承,能做的事情少

2、implements Runnable ,很方便,但无法获取返回值

3、implements Callable ,可以获得返回值,返回值可自行定义

本章节介绍下callable使用

1、创建一个类,实现callable

public class MyCallable implements Callable<String> {

    private int a ;

    public MyCallable(int a){
        this.a = a;
    }


    @Override
    public String call() throws Exception {

        Thread.sleep(4000);
        int sum = 0;

        for (int i = 0; i < a; i++) {
            sum += i;
        }

        return "线程求和:" + sum;
    }
}

使用main去测试

public class MyMain2 {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        Callable<String> callable = new MyCallable(100);

        FutureTask<String> f1 = new FutureTask<>(callable);

        new Thread(f1).start();
        String s = f1.get();
        System.out.println("s = " + s);

    }

}

1、创建任务对象
①、定义一个类实现Callable接口,重写call方法,封装要做的事情,和要返回的数据
②、把Callable类型的对象封装成FutureTask(线程任务对象)。
2、把线程任务对象交给Thread对象。
3、调用Thread对象的start方法启动线程,
4、线程执行完毕后、通过FutureTask对象的的qet方法去获取线程任务执行的结果。

 

实际开发中,可以返回一个对象的,只需要在implements Callable<对象>,然后在run方法return对象即可。

 

以上内容纯属学习~

 

posted @ 2024-10-30 17:43  多多指教~  阅读(4)  评论(0编辑  收藏  举报