【Java】Future和Callable

java并发编程(十九)——Callable及Future实战 我们来对callable及future实现线程的常见用法进行探究学习 阅读详情

Future和Callable是多线程中常见的两个类,在Java并发编程实战中有多次提及,写了一个demo演示一下

类的作用

  • Callable

了解线程肯定知道Thread这个线程类,但是一般实现自定义的线程的时候都是实现Runnable这个接口,重写抽象方法run()的。但是这个run()方法是没有返回值的,有的时候我们需要做异步操作,而且需要得到这个操作的返回值,这个时候Callable的价值就出来了。看名字就知道,可回调的。实现它的抽象方法call(),这个是可以带返回值的。

  • Future

执行Callable实现类,我们用线程池,这样提高效率并且减少资源开销。ExecutorService的对象调用submit(Callable c)方法返回的值就是Future。这里的T就是返回值的类型。

代码演示

public class FutureDemo {

    public static void main(String[] args) {
        //创建一个线程池
        ExecutorService executor = Executors.newCachedThreadPool();
        Task task = new Task();
        //线程池去维护这个异步线程操作
        Future<Integer> result = executor.submit(task);
        executor.shutdown();

        try {
            //主线程sleep 1秒
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }

        System.out.println("主线程在执行任务");

        try {
            //这里其实会一直阻塞,直到异步线程将我们需要的结果返回出来再打印。
            //所以这里会抛出阻塞异常
            System.out.println("task运行结果"+result.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

        //主线程是守护线程,等到上面的异步线程都执行完成了,那么就是打印则最后一句话然后退出
        System.out.println("所有任务执行完毕");
    }

}

/**
 * 实现类
 */
class Task implements Callable<Integer>{
    @Override
    public Integer call() throws Exception {
        System.out.println("子线程在进行计算");
        Thread.sleep(3000);
        int sum = 0;
        for(int i=0;i<100;i++)
            sum += i;
        return sum;
    }
}
【Java线程】Callable和Future Callable和Future一个产生结果,一个拿到结果。 Callable接口类似于Runnable,但是Runnable不会返回结果,而Callable可以返回结果,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值。 阅读详情

相关推荐

JAVA Future和Callable的实践教程

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

guanglihuan的专栏 726

CallableAndFuture

ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<String> future = threadPool.submit( new Callable<String&g...

weixin_33974433的博客 289

张量/数组存储方式与向量化展开/展平、view、reshape、permute对比

对于一个Tensor来说,我们可以认为它有两种存储方式。

欢迎关注,共同进步! 3434

【Java 基础篇】Java Callable与Future:并发编程的利器

本文深入介绍了Java中的Callable和Future接口,以及它们在并发编程中的应用。通过实现Callable接口,我们可以定义具体的任务逻辑;通过使用Future对象,我们可以管理任务的执行和获取任务的结果。Callable和Future为我们提供了更灵活和高效的并发编程机制,可以提高代码的性能和可维护性。希望本文对你理解和应用Java Callable和Future有所帮助!

繁依Fanyi的博客 2605

AI时代,程序员何去何从?别慌,看完这篇你就明白了

AI时代程序员的发展方向 摘要:随着AI代码助手的普及,程序员行业面临变革。本文通过实际案例展示AI写代码的能力与局限:AI能生成基础功能代码(如RESTful API、数据处理脚本),但缺乏业务理解、系统设计和复杂逻辑处理能力。程序员的核心价值在于需求分析、架构设计、性能优化等高层能力。未来程序员应: 掌握AI工具提升效率 专注于创新和架构设计 培养业务理解能力 持续学习新技术 AI不会取代程序员,但会淘汰不会使用AI的程序员。建议开发者拥抱AI工具,将其作为助手而非威胁,聚焦高价值工作。

yunque_xianguang的博客 907

大疆机场及无人机上云(航线规划、指令飞行...)

最近基于大疆上云api进行二次开发,后面将按照开发步骤对其进行说明!

资深三维GIS开发 5571

详解Java之Future和Callable

咱们今天聊了不少关于Callable和Future的东西。记住,这两个工具在处理异步任务时特别有用,能帮助咱们写出更高效、更可靠的代码。但同时,也要注意它们的使用场景和潜在的性能影响。希望咱们都能在未来的项目中灵活运用这些知识,写出更加出色的Java程序!以上就是关于Future和Callable的深入解析,结合实际案例和代码示例,希望能帮助咱们更好地理解和应用这两个重要的Java并发工具。面对寒冬,我们更需团结!

宋小黑的博客 1945

【Qt】使用QMediaPlayer播放视频

window平台可以安装K-Lite,linux平台一般各发行版都会默认安装GSteam。播放RTSP视频时,可以使用VLC播放器搭建一个视频推流服务器,用于拉流的客户端的调试。3、如果没有添加Qt环境变量,请把关联的Qt5MultimediaWidgets.dll和Qt5Multimedia.dll放到进程路径下否则也会报ServiceMissingError错误。2、需要安装解码器,否则报 ServiceMissingError 无法找到服务的错误。1、需要在.pro工程文件中引用对应模块。

奔涌的后浪的专栏 2218

Java中Callable和Future

无论使用这里的哪种方式创建线程,都无法在线程结束时return一个返回值。但是在非常多的场景下,我们都需要在线程执行结束时,将执行的结果封装为一个返回值返回给主线程(或者调用者线程)。可以用来表示线程的未来执行结果:一个容器,这个容器内将来存放的是线程的执行结果,线程执行完之前该容器内没有值,但是线程一旦执行成功(不仅支持阻塞获取执行结果,还支持取消任务的执行,判断任务是否执行完成等。,主线程(或者调用者线程)可以跟进子现场的执行情况。,既可以创建线程,又可以获取线程的执行结果,当然。那可能又有人要问了,

BASK2311的博客 1729

【车载以太网】【SOMEIP】Wireshark测试someip

一、 Wireshark SOMEIP plugin 1.1 插件安装 Wireshark插件目录:Help -> About Wireshark -> Folders/Pluginshttps://github.com/jamores/eth-ws-someip 解压后,将所有后缀是lua的文件拷贝到Wireshark安装目录plugins/2.4.10/下。 1.2时间戳调整为UTC显示格式 View -> Time Display Format -> Date and Tim.

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 9724

9、自动定理证明的发展历程与关键技术

本文全面介绍了自动定理证明的发展历程、关键技术及其实际应用,包括消解原理、参数化、支撑集策略等核心方法,并探讨了算法优化、数据结构优化及并行计算等提升效率的手段。同时,文章展望了未来发展方向,如深度学习在定理证明中的应用、交互式定理证明以及高阶逻辑的研究前景。

ll5678的博客 504

Java并发——Callable和Future接口

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!

q16974058的博客 1235

一篇文章带你认识 SpringBoot

文章目录一、原有 Spring 优缺点分析二、SpringBoot 的概述 一、原有 Spring 优缺点分析 (1)Spring 的优点分析 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的 Java 对象(Plain Old Java Object,POJO)实现了EJB的功能。

南淮北安的博客 765

Java,Future,Callable和Executor

如果需要多线程执行某个任务,又希望分给线程的任务能够按照自己指定顺序得到返回值。那么使用Future,Callable和Executor是一个简单方便的选择。以上就是今天要讲的内容,本文仅仅简单介绍了Future,Callable和Executor的使用,而Future提供一个方便快捷,启动多个线程处理同一个问题不同部分的工具,能使我们快速便捷地处理数据,只要将任务合适的分解为独立部分,放入线程中可以大大加快任务执行的速度。

ZZZ_Tong的博客 1018

39、信号流图:解决线性代数方程组的图论方法

本文介绍了信号流图理论在求解线性代数方程组中的应用,重点阐述了Coates方法和Mason方法的原理、步骤及对比分析。通过图论视角,将矩阵运算转化为对有向图结构的分析,利用1-因子、1-阶连接、前向路径和反馈回路等概念,推导出方程组解的拓扑公式。文章结合具体实例演示两种方法的计算过程,并总结其在电路分析、控制系统和通信系统等领域的拓展应用,展示了信号流图理论的直观性与有效性。

pear55的博客 87

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java 线程知识 Callable和Future

为什么会出现 Callable 和 Future 创建线程的2种方式,一种是直接继承 Thread,另外一种就是实现 Runnable 接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 从 Java 1.5 开始,就提供了 Callable 和 Future,通过它们可以在任务...

zhuguang10的博客 285

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java多线程 Callable和Future

Java多线程 Callable和Future

Yeats_Liao的博客 3326

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java并发——Future和Callable

Future和Callable Callable和Runnable主要区别为: Callable接口的call)方法可以有返回值,而Runnable接口的run()方法没有返回值。 Callable 接口的call0)方法可以声明抛出异常,而Runnable接口的run()方法不可以声明抛出异常。 执行完Callable接口中的任务后,返回值是通过Future 接口进行获得的。 get()和ExecutorService中的submit()和isDone()的使用 方法submit()不仅可以传人Cal

吴声子夜歌的博客 367

java callable future说明和使用场景

找到一个很好的场景说明,语法配合场景,学起来用起来才是最快最好的。在本文最后,在补充另外一个场景。 原文地址为:https://dzone.com/articles/java-callable-future-understanding 下面为该网页的拷贝。 In Java multithreading programs, we extensively use Java Callable an...

大仕忆的博客 1822

Java并发——Callable和Future

Executor框架将工作单元划分为任务,即任务是逻辑上的工作单元,而线程是任务异步执行的机制。Runnable是任务的一个抽象,并且理想状态下任务是独立的执行,但是Runnable的run( )不能返回一个结果或者抛出一个受检查的异常,这与我们有些实际任务是不相符的。在通过线程或者executor执行Runnable任务中,不仅仅是不能返回任务的执行结果,有时我们希望可以控制某个任务,或取消或终止,但在executor中一旦提交任务,我们将很难单一的控制任务的生命周期,虽然ExecutorService扩

DR的专栏 2100

Java并发类API -- Future和Callable

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

sinat_33536503的博客 1204

java callable future_Callable和Future

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

weixin_35766215的博客 333

Java并发编程:Callable、Future和FutureTask

  先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法: public interface Runnable { public abstract void run(); }   由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。   Callable位于java.util.concurrent包下,它也是...

weixin_37992564的博客 1081

java callable future,Java Callable 和 Future

Java 中 Runnable 封装一个异步运行的任务,可以把它想象成为一个没有参数和返回值的异步方法。Callable 与 Runnable 类似,但是有返回值。Future 保存异步计算的结果。CallableCallable 接口是一个参数化的类型,只有一个方法 call。public interface Callable {V call() throws Exception;}类型参数是返...

weixin_31898831的博客 120
上一篇: 【mybatis】mybatis调用sqlserver存储过程和表值函数
下一篇: 【Java】Observer和Observable实现观察者模式
ColdFireMan
博客等级 码龄10年 27粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值