Java多线程之Callable接口的实现
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)Callable规定的方法是call(),而Runnable规定的方法是run().
- (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
- (3)call()方法可抛出异常,而run()方法是不能抛出异常的。
- (4)运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。
- 它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
- 通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
- Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
from: https://www.cnblogs.com/baizhanshi/p/6425209.html
Java多线程之Callable接口的实现相关推荐
- java多线程之Callable接口
1.Callable VS Runnable Callable和Runnbale一样代表着是线程任务,区别在于Callable有返回值并且可以抛出异常. 2.创建并启动有返回值的线程的步骤 创建Cal ...
- Java多线程之Callable、Future和FutureTask
Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...
- java callable接口_Java多线程之Callable接口的实现有返回值的线程
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util. ...
- Java多线程之Lock接口
为什么80%的码农都做不了架构师?>>> Lock接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多 ...
- Java多线程之8Lock问题解析
Java多线程之8Lock问题解析 本文目录 1. 8Lock实例: 标准访问的时候,请问先打印邮件还是短信? sendEmail方法暂停4秒钟,请问先打印邮件还是短信? 新增Hello普通方法,请问 ...
- Java多线程之Runable与Thread
Java多线程是Java开发中的基础内容,但是涉及到高并发就有很深的研究可做了. 最近看了下<Java并发实战>,发先有些地方,虽然可以理解,但是自己在应用中很难下手. 所以还是先回顾一下 ...
- 多线程之callable详解
多线程之callable详解 面试有人会问:线程的实现方式有几种? 很多人可能回答:2种,继承Thread类,实现Runnable接口. 很多忽略了callable这种方式. 也许有人知道callab ...
- JAVA多线程之wait/notify
本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...
- Java多线程之Synchronized和Lock的区别
Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...
最新文章
- php开发支持的文件类型整理
- springboot第十一讲
- tebluea 仪表板如何联动_报告厅音响设备和辅助设备.doc
- mybatis学习(1):【持久化框架】Mybatis简介与原理
- docker-compose搭建ghost博客系统
- android获取spinner的值_在Android的Spinner中实现键值对的正确方法是什么
- mysql-基本操作
- 关于opencv4.5.3读取视频失败问题
- 圈圈叫你玩usb读书笔记
- AB Micro800编程环境CCW安装
- android+桌面+横屏,安卓怎么强制桌面横屏
- 去掉 新版GeForce Experience 桌面录制视频时的 右上角图标
- namecheap 添加二级域名
- NLP-文本处理:英文文本挖掘预处理流程总结
- 蓝桥杯「鲁卡斯队列」
- redis中使用GeoHash
- 图像处理技术-基本运算
- Transformer面试 GavinNLP Transformer101之41-50
- Warmup Learning
- 适合中介的二手房房源管理系统