future java 多线程_Java多线程之Future与FutureTask

一:Future

在使用实现Callable创建线程时,call()方法是有返回值的。那么,我们在编程时用什么来代表这个 线程执行后才能返回的未来结果 呢?那就是 Future类型。

顾名思义,Future——未来值,我们用这个未来值来代替编程中需要用到线程结果的地方,然后在实际运行时,通过 future.get() 方法来获取线程的真正运行结果。

Future接口有一个泛型参数,其类型与call()方法的返回值类型要一致,也就是说,Future  只是代表 V类型的未来值 而已,不是真的有值存在,需要用到这个具体的值时,就需用V类型的对象future通过get()获取线程的实际运行结果值。

(注:JDK8中提供了CompletableFuture,用来设置线程的完成时间。Future最令人诟病的就是要等待,要自己去检查任务是否完成了,在Future中,任务完成的时间是不可控的,CompletableFuture解决了这个问题。)

二:FutureTask

FutureTask是一种可以取消的(在线程执行完成之前取消)异步线程,它实现了Runnable接口和Future接口,也就是说:它既可以运行线程,又可以携带返回结果。故:实现runnable创建的线程类、实现callable实现的线程类都可以包装成FutureTask对象进行启动。

FutureTask实现了Future接口,故Future中的get()、isDone()、cancel()方法等都得到了具体实现,所以可以通过futuretask对象获取异步线程的执行结果、查询线程的完成状态、取消线程。

FutureTask实现了Runable接口,所以它可以作为Thread类的构造参数被包装成thread类进行启动,也可以被提交给线程池的excute(futuretask)进行启动。

使用过程:创建runnable实现类对象或callable实现类对象——创建FutureTask对象,把runnable实现类对象或callable实现类对象作为参数

——创建Thread对象把futuretask对象作为参数,然后通过thread对象.start()启动,通过Future类型的list保存异步结果

——或者创建线程池,把futuretask对象作为参数交给excute(futuretask)启动,通过Future类型的list保存异步结果

——之后可以通过线程的isDone()查询线程完成状态,通过 cancel()取消线程,通过future结果的get()获取真正结果。(若在get()前线程调用了cancel(),则会抛出异常)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

switch字符串jdk_从JDK 12删除原始字符串文字

switch字符串jdk已经提出从JDK 12中删除原始字符串文字(预览) (它将在12月13日进入Rampdown第一阶段 )。 Brian Goetz撰写了删除此预览功能的动机的详细说明 ( JEP 326 )。 在Java subreddit上也对此进行了…

win7旗舰版安装不了python_怎样在Win7 64位旗舰版安装Python+Eclipse开发环境

自从上周抛弃了WinXP转而安装了Win7,64位后,尝试安装PythonEclipse遇到了一点小问题。现在已经解决,将安装顺序记录如下,供参考。Setp1,到ORACLE网站下载64位的JDK。http://www.oracle.com/technetwork/java/javase/do…

MacOS下的取色器/拾色器推荐

文章目录ColorSnapper2ColorSlurp 不错,App Store 可以下载SipChromaColor PickerPixeur(推荐)操作说明ColorSnapper2 ColorSlurp 不错,App Store 可以下载 Sip Chroma Color Picker Pixeur(推荐) 体…

查看oracle会话和进程_带有Oracle Digital Assistant和Fn Project的会话式UI

查看oracle会话和进程在这里和那里,我们看到了无数的预测,很快聊天机器人将在用户与其系统之间的通信中扮演关键角色。 我没有水晶球,也不想等待这个“很快”,所以我决定现在就使这些预言成真,看看它是什么样。 我正在…

设置 input元素placeholder的字体颜色

placeholder 属性提供可描述输入字段预期值的提示信息&#xff08;hint&#xff09;。 该提示会在输入字段为空时显示&#xff0c;并会在字段获得焦点时消失。 placeholder 属性适用于以下的 <input> 类型&#xff1a;text, search, url, telephone, email 以及 passwo…

网页益智游戏怎么制作_休息一下,或者:如何使用Java 12制作出色的益智游戏...

网页益智游戏怎么制作Java 12以实验形式提供了switch表达式以及switch和break语句的新形式。 对于可能很少用到的构造&#xff0c;有大量的新语法和语义-当然&#xff0c;对于那些困惑者和认证考试问题的作者来说&#xff0c;这是一件了不起的礼物。 如果您喜欢Java拼图游戏&am…

java aes 解密 文件_Java AES文件加解密

转自&#xff1a;http://www.webtag123.com/java/4049.htmlAESUtils.javapackage demo.security;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.security.Key;imp…

JavaScript(JS)的习惯写法总结

//取整 parseInt(a,10); //Before Math.floor(a); //Before a>>0; //Before ~~a; //After a|0; //After//四舍五入 Math.round(a); //Before a.5|0; //After//内置值 undefined; //Before void 0; //After, 快 0[0]; //After, 略慢//内置值 Infinity; 1/0;//布尔值短写法…

java模拟连接超时_Java:使用Toxiproxy模拟各种连接问题

java模拟连接超时用Toxiproxy和Java的HttpURLConnection模拟各种连接问题&#xff0c;以查看产生了什么样的错误&#xff1a;连接超时vs.读取超时vs.连接被拒绝…。 结果&#xff1a; 系统&#xff1a;openjdk 11.0.1 2018-10-16 (.setConnectTimeout 1) > java.net.Socke…

java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

《尸家保镖》 《猛鬼出千》 《不死心灵》 《大家发财》 《灵幻少女》 《九天玄女》 《僵尸至尊》 《湘西尸王》 《尸前想后》 《魔高一丈》 《一世好命》 《妖兽尸王》 《人蝎大战》 《星际钝胎》 《艳女还魂》 《邪完再邪》 《艳鬼山坟》 《尸破今天阳光很好&#xff0c;坐在窗…

正则表达式中的分组的匹配次数的理解

正则表达式&#xff1a;/((\d){1,6})/ 这个正则表达式可以匹配任意数量的数字。 限定符 指的是前面的子表达式 (\d){1,6} 可以出现 1 次或者多次&#xff0c;所以如果是贪婪匹配&#xff0c;每次迭代匹配的数字个数可以超过 6 个&#xff08;即 ≥1&#xff09;&#xff1b;如…

aws使用技巧_AWS:避免那些“神圣的法案”时刻的一些技巧

aws使用技巧云非常棒&#xff1a;几乎100&#xff05;的可用性&#xff0c;接近零的维护&#xff0c;按需付费&#xff0c;最重要的是&#xff0c;它具有无限的可扩展性。 但是最后两个很容易把你咬回去&#xff0c;把那令人敬畏的事情变成一场噩梦。 偶尔您会看到类似的故事…

JAVA类和对象访问_Java类和对象

一、类类是封装对象的属性和行为的载体&#xff0c;在Java语言中对象的属性以成员变量的形式存在&#xff0c;而对象的方法以成员方法的形式存在。1. 类的构造方法构造方法是一个与类同名的方法&#xff0c;对象的创建就是通过构造方法完成的&#xff0c;构造方法分为有参构造方…

扩展方法 枚举值_扩展枚举功能的两种方法

扩展方法 枚举值前言 在上一篇文章中&#xff0c;我解释了如何以及为什么在Java代码中使用enums而不是switch/case控制结构。 在这里&#xff0c;我将展示如何扩展现有enums功能。 介绍 Java enum是一种编译器魔术。 在字节码中&#xff0c;任何enum都表示为扩展抽象类java.la…

正则表达式中关于字符集的问题

/[abc]/&#xff0c;匹配1或者多个方括号中的任意字符&#xff0c;方括号中的字符是“或者”的关系&#xff0c;等价于 /(a|b|c)/ /(abc)/&#xff0c;匹配1个或者多个 abc&#xff0c;abc 是一个整体&#xff0c;如下图所示&#xff1a; /[0-9|_|-]/&#xff0c;匹配由数字…

spring 构造函数注入_Spring依赖注入–字段vs设置器vs构造函数注入

spring 构造函数注入欢迎使用Spring Dependency Injection –字段&#xff0c;设置器&#xff0c;构造函数注入教程。 了解场注入 &#xff0c; 二传手注入和构造函数注入之间的区别。 借助代码示例&#xff0c;我们将看到使用每个示例的好处以及为什么选择一个而不是另一个。 …

java 快速io_Java编程在ICPC快速IO实现源码

本文将介绍Java在ICPC快速IO实现方法&#xff0c;下面看看具体代码。不处理EOF&#xff1a;import java.io.OutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Arrays;import java.util.Random;import java.io…

adf开发_如何在ADF中将参数传递给ActionListener

adf开发在某些情况下&#xff0c;需要将值传递给ADF Button的ActionListener。 可以由actionListeners调用的方法只有一个ActionEvent类型的参数。 因此&#xff0c;我将解释如何将参数传递给该bean方法&#xff0c;但是它在方法签名中仅包含一个参数ActionEvent。 我在页面…

JavaScript/JS的学习

文章目录JavaScript 简介JavaScript 发展史ECMAScript基本语法与 HTML 结合方式数据类型类型转换非 number 转成 number非 boolean 转成 boolean特殊语法变量运算符双等号&#xff08;&#xff09;全等号&#xff08;&#xff09;流程控制语句switch...casewhilefor 循环对象Fu…