【 java 多线程】创建多线程的方式三:使用 Callable 接口创建多线程

发布于:2022-10-29 ⋅ 阅读:(380) ⋅ 点赞:(0)

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
  • 📝 个人主页:馆主阿牛🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:java 小白到高手的蜕变🍁
  • 💬格言:要成为光,因为有怕黑的人!🔥
    请添加图片描述

前言

创建多线程的方式其实有四种,前面我们写过了最常见的Thread 和 Runnable实现多线程,这节我将总结一下第三种方式,使用Callable接口创建多线程!

与Runnable相比,Callable有啥不同

与使用 Runnable 相比, Callable 功能更强大!

  • 相比run()方法,call()可以有返回值
  • call() 方法可以抛出异常
  • Call() 支持泛型的返回值
  • 需要借助 FutureTask 类,比如获取返回结果。

Future 接口

  • 可以对具体 Runnable 、 Callable 任务的执行结果进行取消、查询是
    否完成、获取结果等。
  • FutrueTask 是 Futrue 接口的唯一的实现类。
  • FutureTask 同时实现了 Runnable , Future 接口。它既可以作为Runnable 被线程执行,又可以作为 Future 得到 Callable 的返回值。

Callable的使用步骤及案例

package 多线程;

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

//创建多线程的方式三,实现Callable接口
public class CallableDemo {
    public static <integer> void main(String[] args) {
        // 3.创建Callable接口实现类的对象
        MyCallable myCallable = new MyCallable();
        // 4.将这个对象传到FutureTask构造器中,创建FutureTask的对象
        FutureTask futureTask = new FutureTask(myCallable);
        // 5.将FutureTask的对象传递到Thread构造器中,创建Thread的对象,并调用start方法开始线程
        new Thread(futureTask).start();

        try {
            // 6.如果Call方法有返回值,则可以有这一步
            // get()方法的返回值即为FutureTask构造起的参数Callable实现类重写的call()的返回值
            Integer sum = (Integer)futureTask.get();
            System.out.println(Thread.currentThread().getName() + ":" + "sum=" + sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

// 1.创建一个实现Callable的实现类
class MyCallable implements Callable {
    // 2.重写call方法,将此线程需要执行的操作申明在call方法中
    @Override
    public Object call() throws Exception {
        // 输出1-10,并求1-10的和
        int sum = 0;
        for(int i = 1;i<=10;i++){
            sum += i;
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
        return sum;
    }
}

在这里插入图片描述

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到