java 使用Callable和Future返回线程执行的结果

【转】-多线程之Callable 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。因为Future只是一个接口,所以是无法直接用来创建对象使用的,因此就有了下面的FutureTask。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。可以看到,这是一个泛型接口,call()函数返回的类型就是传递进来的V类型。 阅读详情

我们可能在某些特殊的需求下需要返回一个线程执行的结果,在java 1.5提供了Callable和Futrue就能帮你实现!不解释看代码

package cn.kge.com;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Demo2 {
		public static void main(String[] args) {
			 ExecutorService threadPool = Executors.newSingleThreadExecutor();
			 
			 Future<String> future = threadPool.submit(new Callable<String>() {
				 public String call(){
					 String str = "hello";
					 try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					 return str+"world";
				 }
			});
			 try {
				System.out.println("执行结果:"+future.get());
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			}
		}
}

执行结果:helloworld


Java利用future及时获取多线程运行结果 在Java编程中,有时候会需要及时获取线程的运行结果,本文就通过一个相关实例向大家介绍Java利用future及时获取线程运行结果的方法,需要的朋友可以参考。 立即下载

相关推荐

命名管道和匿名管道

我们知道进程间是可以通信的。可以达到数据传输、资源共享、事件通知、进程控制等目的。进程间通信主要包括管道、系统IPC,套接字等。 管道分为三种: 普通管道:一是单工,只能单向传输 ,二是仅能在父子进程或者兄弟进程中使用。 流管道:去除了第一种限制,为半双工,可以双向传递, 命名管道:去除了第二种限制 ,可以在很多并不相关的进程 中进行通信。 1、普通管道 int pipe(int f...

ffsiwei的博客 1万+

PTA:6-4 jmu-Java-07多线程-Callable与斐波那契数列(Java) (10分)

使用Callable、Future以多线程的方式求解前n项斐波那契数的和 题目内容 定义CalculateTask类,实现Callable接口 属性:private int n,代表要求n的斐波那契数列。 无参构造函数public CalculateTask(int n),给属性n赋值。 任务功能:返回n的斐波那契数值。 main方法说明: n为后面创建的任务数量。 taskList为计算斐波那契数的任务集合。 results为任务完成后返回的结果集合。 main方法最后使用System.out.print

weixin_45869893的博客 1452

零基础实战:YOLO检测头自定义替换全攻略

本文为零基础用户提供了YOLO检测头自定义替换的完整实战指南。通过将检测头比作汽车的“方向盘”,文章详细阐述了为何需要替换、如何寻找和集成新检测头模块、修改配置文件以及最终训练验证的全过程,旨在帮助用户针对特定任务(如小目标检测)提升模型性能。

perl8的博客 255

ExecutorService、Callable、Future实现有返回结果的多线程原理解析

以上就是执行线程任务run方法后,如何将线程任务结果返回给主线程,其实,还少一个地方补充,就是如何将FutureTask任务丢给线程执行,我们这里用到了线程池, 但是execute(ftask)底层同样是使用一个了线程通过执行start方法开启一个线程,这个新运行的线程最终会执行FutureTask的run方法。因此,我自定义了一个实现Callable接口的类,该类的重写了call方法,我们在执行多线程时希望返回什么样的结果,就可以在该重写的call方法定义。

jcc4261的博客 554

Comsol 弧形声学换能器声聚焦仿真

1. 弧度和曲率半径:弧形声学换能器的形状和曲率半径对声聚焦效果有重要影响。通常,较小的曲率半径和较大的弧度可以实现更强的声聚焦效果。弧形声学换能器声聚焦是指将声波能量集中在弧形声学换能器的特定区域内,以实现更强的声场强度和分辨率。4. 数值仿真和优化:使用声学仿真软件进行数值仿真可以帮助设计和优化弧形声学换能器的声聚焦效果。通过调整几何参数、材料特性和激励信号等参数,可以模拟和优化声聚焦效果。2. 激励信号:通过调整激励信号的频率和幅值,可以实现声波在弧形声学换能器中的聚焦效果。

声学黑洞仿真工作室 1616

Win10管理员权限的‘暗门’:从mmc.exe被阻止,聊聊UAC与自动提权那些事儿

本文深入解析Windows 10中UAC(用户账户控制)与自动提权机制,探讨mmc.exe被阻止的深层原因及解决方案。从UAC工作原理到自动提权机制,再到具体诊断与修复步骤,帮助用户理解并解决权限管理问题,同时平衡安全性与便利性。

weixin_30521161的博客 418

假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

  一般情况,我们实现多线程都是Thread或者Runnable(后者比较多),但是,这两种都是没返回值的,所以我们需要使用callable(有返回值的多线程)和future(获得线程的返回值)来实现了。/** * 假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现? *...

卖克的专栏 8065

别再被网站识别成机器人了!用Python的undetected_chromedriver+Selenium实现无痕自动化

本文详细介绍了如何利用Python的undetected_chromedriver和Selenium实现无痕自动化,突破现代网站的反爬系统。通过修正浏览器指纹、模拟人类操作行为,并结合实战案例,帮助开发者构建难以被识别的自动化脚本,适用于电商监控等场景。

weixin_30367169的博客 251

java的Future和FutureTask

public interface Future Future 表示异步计算的结果。 Future有个get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常。  Future 主要定义了5个方法:  1)boolean cancel(boolean mayInterruptIfRunning):试图取消对此任务的执行。如果任务已完成

linghu_java的专栏 1万+

望获实时Linux与国产芯片协同:打造LinuxCNC数控机床的全栈国产化方案

本文探讨了如何通过望获实时Linux与飞腾、龙芯等国产芯片的深度协同,为LinuxCNC数控机床打造全栈国产化方案。望获实时Linux通过中断隔离等核心技术,提供亚微秒级确定性响应,解决了传统Linux系统实时性不足的痛点,使LinuxCNC得以稳定驱动高精度机床。该方案实现了从硬件、操作系统到应用软件的全栈自主可控,为工业控制领域提供了高性能、可定制的国产化选择。

weixin_29291069的博客 648

数据库常见面试题(附答案)

1.事务四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前,其它会话不能看到过程 一致性,事务前后,数据总额一致 持久性,一旦事务提交,对数据的改变就是永久的 2.数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别 脏读:事务B读取事务A还没有提交的数据 不可重复读:两次事务读的数据不一致 幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看...

csdn问鼎 46万+

Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】

 Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】 Java多线程编程中,经常使用的Thread的Runnable()虽然被经常使用,但其有一个弊端,就是因为无法直接获取该线程的返回值,因为Runnable内的run方法,被定义为void...

chuoshao2508的博客 104

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

线程池执行callable,并获取返回值,多线程返回值

场景: 1.用线程池执行多个线程。 2.每一个线程都有返回值。 3.然后将每个线程的返回结果汇总。 思路: 1.返回值,于是想到用callable,future,其他两种线程执行方式都是没有返回值的。 2.判定所有线程执行完成? 解决方法: import java.util.concurrent.Callable; /** * @author jiayq * @date 2...

qqnbsp的博客 2542

VB摄像头监控

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java多线程 Callable和Future

Java多线程 Callable和Future

Yeats_Liao的博客 3326

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JAVA多线程—Callable详解

Callable作为除Thread和Runnable外第三种线程创建方式, - Callable提高响应速度(减少了创建新线程的时间) - Callable降低资源消耗(重复利用线程池中线程,不需要每次都创建) - Callable便于线程管理

m0_61160520的博客 1万+

Future和Callable使用

2、FutureTask 两种构造器,最终都转化成了 Callable,所以在 run 方法执行的时候,只需要执行 Callable 的 call 方法即可,在执行 c.call()代码时,如果入参是 Runnable 的话, 调用路径为 c.call() -> RunnableAdapter.call() -> Runnable.run(),如果入参是 Callable 的话,直接调用。生命周期只能前进,不能后退。就和线程池的生命周期一样,一旦完全完成了任务,它就永远停在了“已完成”的状态,不能重来。

qq_40664441的博客 1601

callable线程池示例_Java Callable Future示例

callable线程池示例Java Callable and Future are used a lot in multithreaded programming. In last few posts, we learned a lot about java threads but sometimes we wish that a thread could return some value th...

从零开始的教程世界 574

深入理解(13)java多线程之Callable、Future和FutureTask浅析

原文:https://blog.youkuaiyun.com/javazejian/article/details/50896505 我们知道创建线程的方式有两种,一种是实现Runnable接口,另一种是继承Thread,但是这两种方式都有个缺点,那就是在任务执行完成之后无法获取返回结果,那如果我们想要获取返回结果该如何实现呢?还记上一篇Executor框架结构中提到的Callable接口和Future接...

cowbin2012的专栏 1万+

java多线程(4):Callable接口及Future返回值接口

前言 之前我们创建线程是实现Runnable接口,并实现其中的run()方法,这个方法的返回值是void,如果我们想要返回结果怎么办?JDK5给我们提供了一个新的接口,就是Callable接口,其中的call()方法是有返回值的,这个返回值会被Future接口来承接。 正文 我们来看这个call()方法,方法的返回值类型是泛型,可以由用户指定。 @FunctionalInterface public interface Callable<V> { /** * Computes

欢迎来到Jimmy的博客 989

异步执行-Callable、Future、FutureTask

异步执行结果-Callable、Future、FutureTask、CompletionService

weixin_40017062的博客 540

java多线程Callable和Future

java创建线程的三种方式 实现Runnable,重写run方法 继承Thread,重写run方法 实现Callable接口,重写call方法 前两种不能返回执行结果,如果需要,必须通过共享变量等线程通信方式获取,比较麻烦。通过Callable 和Future ,可以得到认知执行完毕之后的结果。Callable定义了执行的任务和返回的结果。Future 用来(1)获取返回的结果;(2)判断是否...

alwaysBrother的博客 362

使用ExecutorService、Callable、Future实现有返回结果的线程

 可返回值的任务必须实现Callable接口 无返回值的任务必须实现Runnable接口 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object 注意:get方法是阻塞的,即:线程无返回结果,get方法会一直等待   例子1: /** * 有返回值的线程 */ @SuppressWarnings("unc...

pdw2009的专栏 3458

Java多线程:Callable、ExecutorService、CountDownLatch、Future和FutureTask

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

luenxin的博客 2430

【第十二篇】Java 线程池Future和FutureTask【重点】

1.1 概述   本文主要讲解Java线程池与Future和FutureTask的结合使用,通过本文的学习你可以轻松的在日常开发中运用线程池与Future和FutureTask的使用。 Future的出现原因 我们在Java线程池ThreadPoolExecutor详解中利用execute(Runnable r)方法来异步执行任务,但是有一个缺点,就是无法执行带有返回值的任务。 1.2 原理详解 1.2.1 结构图 FutureTask实现了RunnableFuture接口,而RunnableFutu

ᶻᶻᶻ 枕星河的博客 1万+

Callable,Future 多线程并发获取结果

转载至:https://blog.youkuaiyun.com/sinat_39456789/article/details/88181981 1.futrue 接口,callable接口 Callable接口代表一段可以调用并返回结果的代码;Future接口表示异步任务,是还没有完成的任务给出的未来结果。所以说Callable用于产生结果,Future用于获取结果。 Callable接口使用泛型去定...

kevincang的博客 632
上一篇: java 线程池的原理以及使用
下一篇: Java 信号量 Semaphore 介绍
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值