【JUC】Callable接口
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接口区别
- 是否有返回值, Callable有返回值
- 是否抛出异常, 无法计算结果会有异常抛出
- 实现方法名称不同, Runable接口是run方法, Callable接口是call方法
想要通过Callable接口创建线程,必须得通过Runnable接口的实现类 FutureTask,FutureTask构造可以传递Callable,然后new Thread,放入FutureTask
【JUC】Callable接口相关推荐
- JUC并发编程之Callable接口、JUC三大辅助类
目录 8. Callable接口 8.1 创建线程的多种方式 8.2 概述 8.3 用Callable接口创建Thred线程 8.4 小结(重点) 9. JUC 三大辅助类 9.1 概述 9.2 减少 ...
- 【JUC并发编程07】Callable接口
文章目录 7 Callable接口 7.1 Callable接口创建线程 7.2 FutureTask 7 Callable接口 创建线程的多种方式: 继承Thread类 实现Runnable接口 C ...
- JUC之Callable接口
Callable 创建线程有四种方式: 继承Thread类 实现Runnable接口 Callable接口 线程池 前两种前面说过了, Runnable接口是比较常用的, 因为在Java中继承是很重要 ...
- 实现多线程的方式之实现Callable接口
package com.hls.juc; import java.util.concurrent.Callable;import java.util.concurrent.ExecutionExcep ...
- 7、Callable接口
7.1.Calledable接口与Runnable接口的区别 是否有返回值 Calledable 有返回值:Runnable无返回值 是否抛出异常 Calledable 会抛出异常:Runnable不 ...
- java.util.concurrent.Callable 接口 源码
2019独角兽企业重金招聘Python工程师标准>>> 线程池相关 源码: package java.util.concurrent;@FunctionalInterface pub ...
- Java多线程之Callable接口的实现
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.ut ...
- 多线程——实现Callable接口
前两篇博客(多线程--继承Thread类.多线程--实现Runnable接口 )介绍了java使用线程的两种方法.这篇博客继续介绍第三种方法--实现Callable接口. 先说一下Runnable和C ...
- 【Android 异步操作】FutureTask 分析 ( Future 接口解析 | Runnable 接口解析 | Callable 接口解析 )
文章目录 一.Future 接口 1.Future 接口简介 2.取消任务方法 3.Future 接口源码注释 二.Callable 接口 三.Runnable 接口 上一篇博客 [Android 异 ...
最新文章
- java I/O
- oracle em 双网卡,VirtualBox 双网卡配置
- 【Android NDK 开发】JNI 引用 ( 全局引用 | NewGlobalRef | DeleteGlobalRef )
- 动态规划专题 01背包问题详解【转】
- visio网络拓扑图_人船模型怎么画?分享高颜值模型图软件
- OpenResty-Nginx安装目录介绍
- hive insert报错return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask (state=08S01,code=1)
- “约定优于配置”与Magento改造尝试四之block、helper和model载入
- 第二阶段冲刺 第四天
- C++ 从零单排(2)-基础知识二
- xp计算机无线开关机,xp定时关机与重启妙法 -电脑资料
- hadoop、hive搭建
- 海量的超赞 Linux 软件
- 惠普服务器修改ilo密码,HP 修改ILO密码
- 2022-2027年中国卫星遥感行业市场深度分析及投资战略规划报告
- C语言散列法求英文字母字符串求余,c语言求余数
- 计算机图像分析系统属于,智能图像分析系统
- YOLOv5模型剪枝压缩
- 大蟒蛇python头像_程序员用Python获取了自己以前的QQ历史头像,以前的非主流形象简直不忍直视...
- 有关POP3邮件接收服务的介绍