首页 > 编程语言 >Java中的Future

Java中的Future

时间:2023-08-20 23:14:50浏览次数:51  
标签:Java 接口 callable Future 计算 FutureTask 多线程

1.Future解决了什么问题

Future是java中的一个接口,主要用于java多线程计算过程的异步结果获取,能够感知计算的进度,与传统的多线程实现方式,比如继承Thread类,实现runnable接口,它们主要的局限在于对多线程运行的本身缺少监督。

2.Callable接口和Runnable接口区别

下面是它们之间的主要区别:

  1. runable接口是用run方法作为线程运行任务的入口,callable接口使用call方法
  2. 运行Callable任务可拿到一个Future对象, Future表示异步计算的结果
  3. callable的实现类FutureTask提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。

FutureTask类:包装callable接口,并同时实现了Runable接口和Future接口,实现Runnable接口是为了满足多线程并发执行的目的,实现Future接口则是为了满足多线程并发过程中新线程不可控问题。

FutureTask的构造方法:

public FutureTask(Callable<V> callable) {
if (callable == null)
throw new NullPointerException();
this.callable = callable;
this.state = NEW; // ensure visibility of callable
}

NEW代表异步计算还没开始,
COMPLETING 代表计算正在进行中
NORMAL 代表计算正常结束
EXCEPTIONAL 代表计算过程中出现了异常
CANCELLED 代表计算任务被取消
INTERRUPTING 代表计算任务正在被中断执行
INTERRUPTED 代表计算任务已经被中断执行

标签:Java,接口,callable,Future,计算,FutureTask,多线程
From: https://www.cnblogs.com/KL2016/p/17644827.html

相关文章

  • java 网络编程
    网络编程一、概述网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。计算机网络把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件,软件,数据信息等资源。网......
  • Windows中Java安装及环境变量配置
    Windows中Java安装及环境变量配置目录Windows中Java安装及环境变量配置1、下载jdk安装包2、安装JDK3、配置环境变量3.1、环境变量配置页进入3.2、环境变量1:JAVA_HOME3.3、环境变量2:CLASSPATH3.4、环境变量3:Path4、验证安装1、下载jdk安装包通过以下镜像站下载jdk安装包:https://......
  • Java动态追踪
    Java动态追踪什么是Java动态追踪?Java动态追踪是一种工具,可以用于监控Java应用程序的性能,了解应用程序在运行时的行为。Java动态追踪工具可以跟踪应用程序的方法调用、内存使用情况、线程活动等。它可以帮助开发人员找到应用程序的瓶颈和问题,并提供优化建议。Java动态追踪工具可......
  • JavaWeb随笔
    JavascriptJavascript是客户端的一个脚本语言<scriptlanguage="JavaScript">   varstr="helloworld";   alert(typeofstr);   str=999;   alert(typeofstr);  </script>Javascript是一门弱类型的语言,变量的数据类型由后面附的值类型决定(......
  • java脚本模拟服务器内存溢出实战&服务器部署java项目
    一、背景:使用javaspringboot,实现linux服务器内存溢出情况。二、方案1、打包成war包,可以直接将war包部署在tomcat容器里2、springboot,打包成jar包。打的jar包,内置了tomcat,所以在服务器上,直接启jar包就行,没有必要放在tomcat容器里部署,在启动jar包时,可以配置线程池等。这......
  • Cause: java.sql.SQLException: Field 'id' doesn't have a default value Field 'id&
    报错内容: 是因为实体类文件中设置主键自增的类型不对导致的,建议再温习一下逐渐自增的类型以及使用方式我自己的实体类里面设置的IdType为auto,但是主键id是char类型的,还不是int数值类型,所以无法设置为自增 这里需要换成IdType.ID_WORKER_STR@ApiModelProperty(......
  • 探索Java中的并发编程:多线程同步与性能优化
    在后端开发领域,Java作为一门强大的编程语言,广泛应用于构建高性能和并发性能强大的应用程序。本文将深入探讨Java中的并发编程,重点关注多线程同步机制与性能优化策略。通过结合实际代码示例,为读者提供关于并发编程的深奥知识和实用方法。1.并发编程概述与原理并发编程是指多个线程......
  • java.lang.NoSuchMethodError: com.baomidou.mybatisplus.core.toolkit.StringUtils.i
    在运行springboot项目的时候爆java.lang.NoSuchMethodError:com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(Ljava/lang/CharSequence;)Z错误错误如下11:49:08.390[restartedMain]DEBUGorg.springframework.boot.context.logging.ClasspathLoggingApplica......
  • Java踩坑3.org.gradle.api.tasks.sourceset.getcompiloconfigurationname
    idea2018自带gradle版本4.1我改properties文件为7.5启动项目,sync时报错,如标题。解决步骤:1.我尝试更改jdk9和11都一样报错。2.我尝试改properties文件为6.4不报错。3.我仍然使用properties文件为7.5,不理会build窗口的这个错误。在右侧的gradle插件build,clean这些正常使用。......
  • 《Java编程思想第四版》学习笔记17
    崩溃JavaJava标准集合里包含了toString()方法,所以它们能生成自己的String表达方式,包括它们容纳的对象。例如在Vector中,toString()会在Vector的各个元素中步进和遍历,并为每个元素调用toString()。假定我们现在想打印出自己类的地址。看起来似乎简单地引用this即可(特别......