import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/*
 * 一、创建执行线程的方式三:实现 Callable 接口。 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常。
 *
 * 二、执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。  FutureTask 是  Future 接口的实现类
 */
public class TestCallable {
    public static void main(String[] args) {
        ThreadDemo td = new ThreadDemo();
        //1.执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。
        FutureTask<Integer> result = new FutureTask<>(td);
        new Thread(result).start();
        //2.接收线程运算后的结果
        try {
            Integer sum = result.get();  //FutureTask 可用于 闭锁 类似于CountDownLatch的作用,在所有的线程没有执行完成之后这里是不会执行的
            System.out.println(sum);
            System.out.println("------------------------------------");
        catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}
class ThreadDemo implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 0; i <= 100000; i++) {
            sum += i;
        }
        return sum;
    }
}

 综上例子可以看到: Callable 和 Future接口的区别

  1. (1)Callable规定的方法是call(),而Runnable规定的方法是run().
  2. (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
  3. (3)call()方法可抛出异常,而run()方法是不能抛出异常的。
  4. (4)运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。
  5. 它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
  6. 通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
  7. Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。

from: https://www.cnblogs.com/baizhanshi/p/6425209.html

Java多线程之Callable接口的实现相关推荐

  1. java多线程之Callable接口

    1.Callable VS Runnable Callable和Runnbale一样代表着是线程任务,区别在于Callable有返回值并且可以抛出异常. 2.创建并启动有返回值的线程的步骤 创建Cal ...

  2. Java多线程之Callable、Future和FutureTask

    Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...

  3. java callable接口_Java多线程之Callable接口的实现有返回值的线程

    import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util. ...

  4. Java多线程之Lock接口

    为什么80%的码农都做不了架构师?>>>    Lock接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多 ...

  5. Java多线程之8Lock问题解析

    Java多线程之8Lock问题解析 本文目录 1. 8Lock实例: 标准访问的时候,请问先打印邮件还是短信? sendEmail方法暂停4秒钟,请问先打印邮件还是短信? 新增Hello普通方法,请问 ...

  6. Java多线程之Runable与Thread

    Java多线程是Java开发中的基础内容,但是涉及到高并发就有很深的研究可做了. 最近看了下<Java并发实战>,发先有些地方,虽然可以理解,但是自己在应用中很难下手. 所以还是先回顾一下 ...

  7. 多线程之callable详解

    多线程之callable详解 面试有人会问:线程的实现方式有几种? 很多人可能回答:2种,继承Thread类,实现Runnable接口. 很多忽略了callable这种方式. 也许有人知道callab ...

  8. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  9. Java多线程之Synchronized和Lock的区别

    Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...

最新文章

  1. php开发支持的文件类型整理
  2. springboot第十一讲
  3. tebluea 仪表板如何联动_报告厅音响设备和辅助设备.doc
  4. mybatis学习(1):【持久化框架】Mybatis简介与原理
  5. docker-compose搭建ghost博客系统
  6. android获取spinner的值_在Android的Spinner中实现键值对的正确方法是什么
  7. mysql-基本操作
  8. 关于opencv4.5.3读取视频失败问题
  9. 圈圈叫你玩usb读书笔记
  10. AB Micro800编程环境CCW安装
  11. android+桌面+横屏,安卓怎么强制桌面横屏
  12. 去掉 新版GeForce Experience 桌面录制视频时的 右上角图标
  13. namecheap 添加二级域名
  14. NLP-文本处理:英文文本挖掘预处理流程总结
  15. 蓝桥杯「鲁卡斯队列」
  16. redis中使用GeoHash
  17. 图像处理技术-基本运算
  18. Transformer面试 GavinNLP Transformer101之41-50
  19. Warmup Learning
  20. 适合中介的二手房房源管理系统

热门文章

  1. 图像分区域合成,这个新方法实现了人脸的「精准整容」
  2. 9大数据集6大度量指标完胜,周志华等提出深度森林处理多标签学习
  3. SAP S4HANA TR传输之操作
  4. 「模型解读」深度学习网络只能有一个输入吗
  5. 「杂谈」白身,初识,不惑,有识,你处于深度学习哪一重境界了
  6. 一般来说,神经网络的架构可以分为哪三类?
  7. 免费教材丨第56期:《深度学习导论及案例分析》、《谷歌黑板报-数学之美》
  8. 物理如何证明上帝的存在?
  9. 吴恩达:2020 年,这些 AI 大事件让我无法忘怀...
  10. 图文详解并联机器人,你了解吗?