文档章节

实现线程的第三种方式——Callable & Future

ytuan996
 ytuan996
发布于 11/16 00:49
字数 362
阅读 20
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

Callable

Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个方法 call.

public interface Callable<V> {
    V call() throws Exception;
}
  • 类型参数是返回值的类型。 例如, Callable< Integer> 表示一个最终返回 Integer 对象的异 步计算。

Future

Future 保存异步计算的结果。 可以启动一个计算, 将 Future 对象交给某个线程, 然后忘 掉它。Future 对象的所有者在结果计算好之后就可以获得它。

public interface Future<V> {
// 取消一个任务
    boolean cancel(boolean mayInterruptIfRunning);
// 任务是为被取消
    boolean isCancelled();
// 计算是否完成
    boolean isDone();
// 阻塞调用,直到计算完成
    V get() throws InterruptedException, ExecutionException;
// 计算超时,抛出异常
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

FutureTask

FutureTask 包装器是一种非常便利的机制, 可将 Callable 转换成 Future 和 Runnable, 它 同时实现二者的接口。

Callable<Integer> nyComputation = . . .;
FutureTask<Integer> task = new FutureTask<Integer>(myConiputation); 
Thread t = new Thread(task); // it's a Runnable
t.startO;
Integer result = task.getO;  // 阻塞

© 著作权归作者所有

上一篇: Java执行器
下一篇: 阻塞队列
ytuan996
粉丝 1
博文 48
码字总数 40235
作品 0
济南
私信 提问
Java多线程5-Callable、Future 和FutureTask

前言 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变...

香沙小熊
2018/11/27
0
0
java 多线程 三种实现方式

一、什么是多线程? 引用网上别人的一段话: 单进程单线程:一个人在一个桌子上吃菜。 单进程多线程:多个人在同一个桌子上一起吃菜。 多进程单线程:多个人每个人在自己的桌子上吃菜。 多线...

阿豪boy
2018/05/16
18
0
java基础thread——java5之后的多线程(浅尝辄止)

承上启下 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象L...

潇潇漓燃
2018/06/03
0
0
JAVA多线程实现的三种方式

最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结。 1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorS...

JasonO
2016/03/08
148
0
【死磕Java并发】-----J.U.C之线程池:线程池的基础架构

原文出处http://cmsblogs.com/ 『chenssy』 经历了Java内存模型、JUC基础之AQS、CAS、Lock、并发工具类、并发容器、阻塞队列、atomic类后,我们开始JUC的最后一部分:线程池。在这个部分你将...

chenssy
2017/10/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

采购单品汇总_华南.xlsx

import pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mp1mp1.rcParams["font.family"] = "STFangsong"# 加载《销售》表数据df1 = pd.read_excel(r"C:\Us......

龙玉滕
今天
5
0
OSChina 周五乱弹 —— 一次四千 要4次还能多给一千

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享金志文的单曲《远走高飞》: 版权又回来了现在听歌得好几个软件 《远走高飞》- 金志文 手机党少年们...

小小编辑
今天
5
0
Spring Cloud Alibaba 实战(十) - Spring Cloud GateWay

> 本文主要内容是:为什么要使用网关,整合Gateway,Gateway核心学习:Route,Predicate,Filter,最后使用Gateway聚合微服务请求 先总结至此的架构 1 网关的价值 不使用网关行嘛? 各个请求直接打在...

JavaEdge
今天
4
0
【CKB.DEV 茶话会】第二期:聊聊 CKB 钱包和 Nervos DAO 全流程

CKB.DEV 茶话会第二期:聊聊 CKB 钱包和 Nervos DAO 全流程 为了鼓励更多优秀的开发者和研究人员参与到 CKB 的开发和生态建设中去,我们希望组织一系列 CKB Developer Seminar(CKB.DEV 茶话...

NervosCommunity
今天
4
0
聊聊rocketmq的HAClient

序 本文主要研究一下rocketmq的HAClient HAClient rocketmq-all-4.6.0-source-release/store/src/main/java/org/apache/rocketmq/store/ha/HAService.java class HAClient extends Serv......

go4it
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部