Callable接口的使用

//比较两个接口
//实现Runnable接口
class MyThread1 implements Runnable {@Overridepublic void run() {}
}//实现Callable接口
class MyThread2 implements Callable {@Overridepublic Integer call() throws Exception {System.out.println(Thread.currentThread().getName() + " 进入Callable");return 200;}
}public class Demo1 {public static void main(String[] args) throws ExecutionException, InterruptedException {new Thread(new MyThread1(), "AA").start();// new Thread(new MyThread2(), "BB").start();  报错//FutureTask -->Runnable接口的实现类FutureTask<Integer> futureTask1 = new FutureTask<>(new MyThread2());//lam表达式FutureTask<Integer> futureTask2 = new FutureTask<>(()->{System.out.println(Thread.currentThread().getName() + " 进入Callable");return 300;});new Thread(futureTask2, "AA").start();
//        new Thread(futureTask1, "BB").start();while (!futureTask2.isDone()) {System.out.println("wait......");}System.out.println(futureTask2.get());System.out.println(futureTask2.get());//只计算一次//        System.out.println(futureTask1.get());System.out.println(Thread.currentThread().getName() + "over");//FutureTask原理  未来任务/*** 举例:* 1.老师上课口渴了没水喝,跑去买水不合适,讲课线程继续,单开启另外线程,让班长去买水,把水买回来放那,老师需要的时候直接get()* 2。三个同学,三个计算任务,我是主线程需要统计他们计算的结果, 假设第二个同学计算量很大,*   我从第一个同学开始汇总,到了第二个同学,他还没计算好, 我单独给第二个同学开一个线程让他继续计算,我去汇总第三个同学。*   等我汇总完了第三个同学, 再回过头来等第二个同学计算完,并汇总。** 汇总一次*/}
}

FutureTask原理

举例:
1.老师上课口渴了没水喝,跑去买水不合适,讲课线程继续,单开启另外线程,让班长去买水,把水买回来放那,老师需要的时候直接get()
2.三个同学,三个计算任务,我是主线程需要统计他们计算的结果, 假设第二个同学计算量很大,我从第一个同学开始汇总,到了第二个同学,他还没计算好, 我单独给第二个同学开一个线程让他继续计算,我去汇总第三个同学。等我汇总完了第三个同学, 再回过头来等第二个同学计算完,并汇总。

Runable接口和Callable接口区别

  1. 是否有返回值, Callable有返回值
  2. 是否抛出异常, 无法计算结果会有异常抛出
  3. 实现方法名称不同, Runable接口是run方法, Callable接口是call方法

想要通过Callable接口创建线程,必须得通过Runnable接口的实现类 FutureTask,FutureTask构造可以传递Callable,然后new Thread,放入FutureTask

【JUC】Callable接口相关推荐

  1. JUC并发编程之Callable接口、JUC三大辅助类

    目录 8. Callable接口 8.1 创建线程的多种方式 8.2 概述 8.3 用Callable接口创建Thred线程 8.4 小结(重点) 9. JUC 三大辅助类 9.1 概述 9.2 减少 ...

  2. 【JUC并发编程07】Callable接口

    文章目录 7 Callable接口 7.1 Callable接口创建线程 7.2 FutureTask 7 Callable接口 创建线程的多种方式: 继承Thread类 实现Runnable接口 C ...

  3. JUC之Callable接口

    Callable 创建线程有四种方式: 继承Thread类 实现Runnable接口 Callable接口 线程池 前两种前面说过了, Runnable接口是比较常用的, 因为在Java中继承是很重要 ...

  4. 实现多线程的方式之实现Callable接口

    package com.hls.juc; import java.util.concurrent.Callable;import java.util.concurrent.ExecutionExcep ...

  5. 7、Callable接口

    7.1.Calledable接口与Runnable接口的区别 是否有返回值 Calledable 有返回值:Runnable无返回值 是否抛出异常 Calledable 会抛出异常:Runnable不 ...

  6. java.util.concurrent.Callable 接口 源码

    2019独角兽企业重金招聘Python工程师标准>>> 线程池相关 源码: package java.util.concurrent;@FunctionalInterface pub ...

  7. Java多线程之Callable接口的实现

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

  8. 多线程——实现Callable接口

    前两篇博客(多线程--继承Thread类.多线程--实现Runnable接口 )介绍了java使用线程的两种方法.这篇博客继续介绍第三种方法--实现Callable接口. 先说一下Runnable和C ...

  9. 【Android 异步操作】FutureTask 分析 ( Future 接口解析 | Runnable 接口解析 | Callable 接口解析 )

    文章目录 一.Future 接口 1.Future 接口简介 2.取消任务方法 3.Future 接口源码注释 二.Callable 接口 三.Runnable 接口 上一篇博客 [Android 异 ...

最新文章

  1. java I/O
  2. oracle em 双网卡,VirtualBox 双网卡配置
  3. 【Android NDK 开发】JNI 引用 ( 全局引用 | NewGlobalRef | DeleteGlobalRef )
  4. 动态规划专题 01背包问题详解【转】
  5. visio网络拓扑图_人船模型怎么画?分享高颜值模型图软件
  6. OpenResty-Nginx安装目录介绍
  7. hive insert报错return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask (state=08S01,code=1)
  8. “约定优于配置”与Magento改造尝试四之block、helper和model载入
  9. 第二阶段冲刺 第四天
  10. C++ 从零单排(2)-基础知识二
  11. xp计算机无线开关机,xp定时关机与重启妙法 -电脑资料
  12. hadoop、hive搭建
  13. 海量的超赞 Linux 软件
  14. 惠普服务器修改ilo密码,HP 修改ILO密码
  15. 2022-2027年中国卫星遥感行业市场深度分析及投资战略规划报告
  16. C语言散列法求英文字母字符串求余,c语言求余数
  17. 计算机图像分析系统属于,智能图像分析系统
  18. YOLOv5模型剪枝压缩
  19. 大蟒蛇python头像_程序员用Python获取了自己以前的QQ历史头像,以前的非主流形象简直不忍直视...
  20. 有关POP3邮件接收服务的介绍

热门文章

  1. 计算机创造奇迹的英语作文,高中英语作文模板:兴趣创造奇迹
  2. fftshift小技巧
  3. MATLAB 2021a+ MAC
  4. matlab zscore函数 数据的标准化处理
  5. gradle引入本地jar
  6. avi转换成mp4格式,avi转mp4
  7. js获取随机数与随机颜色函数的简单封装
  8. 富士康java面试题
  9. 2013年10月17日浙大ZJG听百度CEO李彦宏讲座
  10. 基于OpenCV的二维码和条形码识别