Java 并发编程学习笔记(15) ----Future 和 Callable

JAVA Future和Callable的实践教程 在Java中,Callable接口代表那些可能需要较长时间来执行的任务,并且能返回一个值的任务。与Runnable不同,Callable可返回结果或抛出检查异常。Future接口代表异步计算的结果,提供了检查计算是否完成的方法,以及获取计算结果的方法。这可以让你在计算完成后获得结果,同时主线程可以继续执行其它任务。以下是Future和Callable。 阅读详情

Future 和 Callable

1.1 Callable 和 Runnable 的区别

1.Callable 接口的call()方法可以有返回值,而Runnable接口的run()方法没有返回值。执行完Callable
接口中的任务后,返回值是通过接口进行获得的。
2.Callable 接口的call()方法可以声明抛出异常,而Runnale的接口run()方法不可以声明抛出异常。

1.2 方法cancel(boolean b) 和 isCancelled()的使用

方法cancel(boolean b)的参数 b 的作用是:如果线程正在运行则是否中断正在运行的线程,在代码中使用if(Thread.currentThread().isInterrupted())
进行配合。
方法cancel()的返回值代表发送取消任务的命令是否成功完成

1.3 代码


/**
 * 方法 cancle(boolean mayInterruptIfRunning) 的参数 mayInterruptIfRunning的作用是:
 *      如果线程正在运行则是否中断正在运行的线程,
 *      在代码中使用if(Thread.currentThread().isInterrupted())进行配合。
 * 方法 cancel()的返回值代表发送取消任务的命令是否成功完成
 */
package com.lhc.concurrent.future;

import java.util.concurrent.*;

public class MyCallable implements Callable{
    @Override
    public String call() throws Exception {
        boolean bool = true;
        while(bool){
            if(Thread.currentThread().isInterrupted()){
                throw new InterruptedException();
            }
            System.out.println("运行中");
        }
        return "hello world";
    }

    public static void main(String[] args) throws Exception{
        MyCallable myCallable = new MyCallable();

        ThreadPoolExecutor pool = new ThreadPoolExecutor(5, Integer.MAX_VALUE, 5,
                TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>());
        Future future = pool.submit(myCallable);
        Thread.sleep(4000);
        System.out.println("cancel:" + future.cancel(true) + ",isCancelled:" + future.isCancelled());

    }
}


1.4 测试结果

…
运行中
运行中
运行中
运行中
运行中
运行中
cancel:true,isCancelled:true

小白的web优化之路 四、使用Callable与Future来实现异步请求   在上一篇 小白的web优化之路 三、使用MQ来实现事务异步处理 中,我们使用MQ来将任务异步话,使接口速度得到的极大的提高,这一节中,我们就要考虑一个需要同步返回多次请求的问题。  在完成了产品经理的那个发送短信通知的‘古怪’需求之后,小白觉得自己终于可以继续开发CURD的任务了,心里不免有点小激动。突然,小白收到了产品经理的一个消息,小白心里一震,打开消息,屏幕上写着“小白我这有一个获取信息... 阅读详情

相关推荐

Java线程中:Runnable和Callable的区别和联系

其中Runnable应该是我们最熟悉的接口,它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值。然后使用某个线程去执行该runnable即可实现多线程,Thread类在调用start()函数后就是执行的是Runnable的run()函数。6 }

ManuMAX的博客 979

JAVA并发编程实战-取消和关闭

目录前言1 任务取消1.1 中断 前言 有时候我们希望任务或者线程自然结束前就停止它们,可能用户点击取消或者应用程序需要关闭。Java中提供了中断使一个线程可以要求另一个线程停止当前工作。 1 任务取消 可取消的活动:当外部代码能够在活动自然完成前,将其状态改为完成状态。 可能有多种原因导致活动关闭如: 用户请求的取消。用户点击取消按钮。 限时活动。设置超时器,如果超出停止活动。 应用程序事件,任务分解搜索,一个任务搜索到,停止其它任务。 错误。当多个任务保存页面,一个遇到磁盘满,其它取消。 关闭。当

qq_36566262的博客 1500

初识Classic AUTOSAR开发工具链

在过去,软件和硬件之间具有很强的耦合性,阻碍了软件组件在不同硬件平台上的可移植性和重用性。而AUTOSAR作为汽车电子行业的标准,提供标准的软件接口定义,工程师可以根据需求将软件组件分配到汽车的ECU中,实现标准软件组件的可重用性。

怿星科技的博客 8093

进程与线程

文章目录进程线程实现线程线程常用的方法线程的生命周期:线程安全 进程 是系统进行资源分配和调度的基本单位。 进程和程序的区别: 进程不能脱离计算机存在,处于存活状态的进程会占用某些系统资源,如CPU时间、内存空间、外设访问权等。 进程是动态的代码,若不运行程序,操作系统就不会创建相应的进程;此外可以创建同一个程序的多个进程,例如,同时运行多个计算器程序,任务管理器中将出现多个名为“calc.exe”的进程。 进程占据的是内存,而程序占据的是外存;进程消亡时就不存在了,而程序仍然存在。 线程 是CPU调度

卿本佳人的博客 327

半导体功率器件IGBT工艺全流程

本文概述了功率器件IGBT(绝缘栅双极型晶体管)的关键制造流程。主要工艺包括:基板制备、离子注入(B+/P+/P+FS层)、绝缘膜形成与加工(CVD沉积及刻蚀)、沟槽刻蚀、电极形成(Emitter和Collector)等步骤。通过离子注入、化学气相沉积和物理气相沉积等半导体工艺,依次完成器件各功能层的构建,最终形成具备高功率特性的IGBT器件。该流程体现了功率半导体制造中典型的掺杂、薄膜沉积和图形化工艺技术。

750

易智联LM401模块学习(四)——双串口收发

串口的发送和接受有三种方式,分别是阻塞发送和接收(轮询)、中断方式发送和接收、DMA方式发送和接收。这里我使用阻塞+中断的方式实现双串口通信。简单的串口收发。

weixin_46046597的博客 990

深入理解Callable

概述Callable和Runnbale一样代表着任务,区别在于Callable有返回值并且可以抛出异常。其使用如下: public class CallableDemo { static class SumTask implements Callable<Long> { @Override public Long call() throws Exception

xingfeng_coder的博客 2万+

矢量网络分析仪VNA的校准之SOLT方法

作者:杭州冥鸿电子科技有限公司 邮箱:huanglong@deepelec.com S参数的测量方法有两种,一种是基于扫频测量的原理(VNA),另外一种是基于快沿阶跃响应的原理(TDR)。 下图是VNA的原理框图,主要包括以下部分: (1)激励信号源:提供感兴趣的频率范围内的入射信号; (2)信号分离装置:含功分器和定向耦合器,分离出入射,反射和传输信号; (3)接收机:...

u010018619的博客 2万+

java并发-Callable与Future

基本概念: Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。 Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方...

aoys49082的博客 195

IPD流程中CBB管理的5个致命误区,第3个坑了80%的团队

本文深入剖析了IPD流程中CBB管理的五个致命误区,尤其指出缺乏有效的度量与激励机制是影响80%团队的核心陷阱。文章强调CBB的核心在于前瞻性设计,而非简单归档,并需平衡通用性与产品竞争力,同时建立持续运营机制,确保CBB与市场需求对齐,从而真正实现缩短开发周期、降低成本的目标。

weixin_29234423的博客 569

2023年数学建模国赛三大赛题核心建模思路与实战代码全解

本文全面解析2023年数学建模国赛三大赛题的核心建模思路与实战代码,涵盖塔式太阳能光热发电系统优化、多波束测深系统动态规划及蔬菜商品化策略建模。通过Python代码示例和优化算法(如遗传算法、NSGA2)展示,帮助参赛者掌握数学建模的关键技术与实战技巧,提升竞赛成绩。

weixin_33713350的博客 333

java cancel_Future.cancel()疑难杂症

问题描述在学习并发编程的时候对Future的cancel有点小疑惑。future类里面,有cancel()和isCanceled()的两个方法,前者是发送取消命令给线程并返回是否发送成功,后者是判断该线程是否被取消。但是在实际运用时出现了一些问题。以下会列出问题:问题出现的环境背景及自己尝试过哪些方法查阅了《java并发编程》,发现书里对isCanceled没有详细介绍相关代码问题1.我对线程发送...

weixin_39624606的博客 1086

ZYNQ专题-7020驱动KSZ9031 PHY芯片

之所以有这篇文章,得益于Alinx的开发板。

Anitawen的博客 4965

Java并发编程:Callable、Future和FutureTask

参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务,如果设置true,则表示可以取消正在执行过程中的任务。如果任务已经完成,则无论mayInterruptIfRunning为true还是false,此方法肯定返回false,即如果取消已经完成的任务会返回false;74 //第二种方式,注意这种方式和第一种方式效果是类似的,只不过一个使用的是ExecutorService,一个使用的是Thread。> 形式类型、并返回 null 作为底层任务的结果。

Blue92120的博客 456

FPGA上的YOLOv8加速实现:从Verilog到高层综合

YOLOv8 采用了更高效的C2f模块与轻量化Backbone结构,模型特征包括:结构紧凑、检测头融合高低层特征;支持Anchor-free检测机制;支持INT8、FP16低精度推理;计算密度高,适合FPGA并行优化。

2501_93174773的博客 917

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java并发类API -- Future和Callable

你可以实现 RejectedExecutionHandler 接口来自定义拒绝策略。

sinat_33536503的博客 1204

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Callable和Future

原文链接译文链接 译者:Greenster 校对:沈义扬 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理。Thread类、Runnable接口和Java内存管理模型使得多线程编程简单直接。但正如之前提到过的,Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值。没有返回值这点稍微有点麻烦。 不能声明抛出检查型异常则更麻烦...

JavaEdge全是干货的技术号 2252

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

并发编程 05—— Callable和Future

Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 05—— Callable和Future 并发编程 06—— CompletionService : Exec...

LMAKE_nbsp的博客 248

Callable和Future、FutureTask的使用

Callable和Future、FutureTask的使用 6月 15, 2016 发布在 Java基础 并发的学习与使用系列 第四篇 在Java中,开启一个线程的唯一方式是,是通过Thread的start方法,并且在线程中执行的Runnable的run方法。无论是线程池还是接下来要介绍的Callable,Future还是线程池,最核心最根本的还是调用到Thread.star

fendou_heidou的博客 299

15、Java并发 Java java.util.concurrent.Future

写了几篇 Java 一文秒懂 XXX 系列的文章后,对 Java 并发编程的设计思想真的是竖然起敬。Java 在并发方面引入了 「 将来 」( Future ) 这个概念。把所有不在主线程执行的代码都附加了将来这个灵魂。主线程只负责其它并发线程的创建、启动、监视和处理并发线程完成任务或发生异常时的回调。其它情况,则交给并发线程自己去处理。而双方之间的沟通,就是通过一个个被称之为 「 将来 」 的类出处理。

二师兄撒欢之地 512

【Java】Callable + Future实现多线程查询

1 先定义线程方法,实现Callable接口 @Slf4j public class QueryThread implements Callable<List<QueryResult>> { private QueryParam param; private QueryService queryService; public QueryThre...

咸煌的博客 782

Future接口和Callable

Future接口的5个主要的方法 // 取消任务 boolean cancel( boolean mayInterruptIfRunning); // 判断任务是否已取消 boolean isCancelled(); // 判断任务是否已结束 boolean isDone(); // 获得任务执行结果 get(); // 获得任务执行结果,支持超时 get(long timeout, Ti...

weixin_39137699的博客 128

JAVA 线程之带有返回值的Callable和Future

可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。package thread.callable;import java.util.concurrent.ExecutionException; import java.util

Heqianqian的博客 1214

Callable和Future使用、

在JavaSE5中引入的Callable是一个具有类型参数的范型,他的类型参数方法表示为方法call()而不是run()中返回的值,并且必须使用ExecutorService.submint()方法进行调用。Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。

qq_41273137的博客 356

理解高并发(15).Future、Callable实现原理及用法

概述 jdk1.5推出的,使用它能带来2个方便: 能够获得到线程执行后返回的结果 线程异常有效捕获 简单例子 输出结果:result=hello public class ThreadLocalTest { @SuppressWarnings("unchecked") public static void main(String[] args) { Execu

1510

Thread学习(五)Callable与Future的应用

Callable与Future的应用 submit提交一个任务  Callable接口代表一段可以调用并返回结果的代码;Future接口表示异步任务,是还没有完成的任务给出的未来结果。所以说Callable用于产生结果,Future用于获取结果。  Java 5在concurrency包中引入了Java.util.concurrent.Callable 接口,它和Runnable接口

我是个少年的博客 528
上一篇: Java 并发编程学习笔记(14) ----ThreadPoolExecutor 线程池的方法
下一篇: Java 并发编程学习笔记(16) ----CompletionService
过河的小卒子
博客等级 码龄10年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值