iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中如何使用Callable和Future接口详解
  • 418
分享到

Java中如何使用Callable和Future接口详解

2023-06-20 17:06:32 418人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关Java中如何使用Callable和Future接口详解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Runnable是一个接口,而Thread是Ru

本篇文章给大家分享的是有关Java中如何使用Callable和Future接口详解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Runnable是一个接口,而Thread是Runnable的一个实现类。

所以也就有了之前创建线程的两种方法

  • 继承Thread

  • 实现Runnable

我们看一下新建线程的方法:

Java中如何使用Callable和Future接口详解

都是得传入一个Runnable对象(这句话很关键)

所以传入一个Runnble和Thread对象都行。

现在引入创建线程的第三种方法:Callable

为了实现 Runnable,需要实现不返回任何内容的 run()方法,而对于

Callable,需要实现在完成时返回结果的 call()方法。

• call()方法可以引发异常,而 run()则不能。

Callable最大的特点就是 它能返回数值,并抛出异常,而且它不是run()方法,而是call()方法。

但是Callable最大的问题就是不能丢人Thread类中直接创建,因为Thread只认识Runnable,所以我们必须找到Callable和Runnable之间的桥梁。

Java中如何使用Callable和Future接口详解

也就是找一个类,即和Runnable友关系,又和Callable有关系。

这个类就是FutureTask了。

  • Runnable接口有实现类FutureTask

  • FutureTask构造可以传递Callable

所以创建也给Callable可以这样

新类 MyThread2 实现 callable 接口class MyThread2 implements Callable<Integer>{@Overridepublic Integer call() throws Exception {return 200;}

新建一个callable对象

Callable callable = new MyThread2()

传入callable对象,并新建一个futuretask对象,

FutureTask futureTask2 = new FutureTask(callable)

也可以之间通过lam表达式(函数式接口)实现

Java中如何使用Callable和Future接口详解

新建一个线程,传入FutureTask对象

new Thread(futureTask2, “线程二”).start()

这就是基本步骤。

接下来可以来扩展地讲讲 futuretask的作用

Future对象

Future 接口

当 call()方法完成时,结果必须存储在主线程已知的对象中,以便主线程可以知道该线程返回的结果。为此,可以使用 Future 对象。

将 Future 视为保存结果的对象–它可能暂时不保存结果,但将来会保存(一旦Callable 返回)。Future 基本上是主线程可以跟踪进度以及其他线程的结果的一种方式。要实现此接口,必须重写 5 种方法,这里列出了重要的方法,如下:

• public boolean cancel(boolean mayInterrupt):用于停止任务。

如果尚未启动,它将停止任务。如果已启动,则仅在 mayInterrupt 为 true时才会中断任务。

• public Object get()抛出 InterruptedException,ExecutionException:

用于获取任务的结果。

如果任务完成,它将立即返回结果,否则将等待任务完成,然后返回结果。

• public boolean isDone():如果任务完成,则返回 true,否则返回 false可以看到 Callable 和 Future 做两件事-Callable 与 Runnable 类似,因为它封装了要在另一个线程上运行的任务,而 Future 用于存储从另一个线程获得的结
果。实际上,future 也可以与 Runnable 一起使用。

要创建线程,需要 Runnable。为了获得结果,需要 future。

FutureTask

Java 库具有具体的 FutureTask 类型,该类型实现 Runnable 和 Future,并方便地将两种功能组合在一起。 可以通过为其构造函数提供 Callable 来创建FutureTask。然后,将 FutureTask 对象提供给 Thread 的构造函数以创建Thread 对象。因此,间接地使用 Callable 创建线程。

核心原理:(重点)

在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给 Future 对象在后台完成

• 当主线程将来需要时,就可以通过 Future 对象获得后台作业的计算结果或者执行状态

• 一般 FutureTask 多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。

• 仅在计算完成时才能检索结果;如果计算尚未完成,则阻塞 get 方法

• 一旦计算完成,就不能再重新开始或取消计算

• get 方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常

• get 只计算一次,因此 get 方法放到最后

举个例子吧。

比如现在老师在上课,但是他渴了,他想买水,但是还得继续上课。

这时就可以单独开启一条线程,让班长去帮他买水。(开启单独一条线程,不影响主线程的运行)

Java中如何使用Callable和Future接口详解

Java中如何使用Callable和Future接口详解

get方法可以得到return的值

Java中如何使用Callable和Future接口详解

isDone()方法可以判断是否完成了。

Java中如何使用Callable和Future接口详解
Java中如何使用Callable和Future接口详解

以上就是Java中如何使用Callable和Future接口详解,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Java中如何使用Callable和Future接口详解

本文链接: https://www.lsjlt.com/news/298909.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中如何使用Callable和Future接口详解
    本篇文章给大家分享的是有关Java中如何使用Callable和Future接口详解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Runnable是一个接口,而Thread是Ru...
    99+
    2023-06-20
  • Java并发教程之Callable和Future接口详解
    刚把Thread 的知识理了一遍。 Runnable是一个接口,而Thread是Runnable的一个实现类。 所以也就有了之前创建线程的两种方法 继承Thread ...
    99+
    2024-04-02
  • Java中Future接口详解
    目录一、背景二、Future接口1、入门案例2、Future接口三、CompletableFuture类1、基础说明2、核心方法2.1 实例方法2.2 计算方法2.3 结果获取方法2...
    99+
    2023-05-16
    Java中Future接口 Java Future
  • 在Java中如何使用Callable、Future进行并行编程
    这篇文章将为大家详细讲解有关在Java中如何使用Callable、Future进行并行编程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用Callable、Future进行并行编程在Java中进行并行编...
    99+
    2023-05-30
    java callable future
  • java中怎么理解Callable接口
    本篇内容介绍了“java中怎么理解Callable接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Callable、Executor 与 ...
    99+
    2023-06-16
  • 详解JDK中ExecutorService与Callable和Future对线程的支持
    详解JDK中ExecutorService与Callable和Future对线程的支持代码背景:    假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的...
    99+
    2023-05-31
    jdk executorservice ce
  • 浅析Java中Future接口的使用方法
    目录引言一、Future接口简介二、Future接口的原理三、Future接口的核心方法解析四、Future接口的实现类五、Future接口的源码解读六、Future接口的使用示例结...
    99+
    2023-05-19
    Java Future接口使用方法 Java Future接口使用 Java Future接口
  • Java中Future和FutureTask的示例详解及使用
    目录一、Future 接口二、FutureTask三、使用 Callable 和 Future四、小结(FutureTask核心原理)总结一、Future 接口 当 call()方法...
    99+
    2024-04-02
  • JAVA Future类的使用详解
    目录前言生活中的Future模式场景1:场景2Future模式中的主要角色实现一个简单的Future模式Java中的Future模式Future模式的高阶版本—— Completab...
    99+
    2024-04-02
  • java中Callable接口的作用是什么
    java中Callable接口的作用是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象...
    99+
    2023-06-14
  • java如何实现Callable接口创建线程类
    小编给大家分享一下java如何实现Callable接口创建线程类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现 Callab...
    99+
    2024-04-02
  • Java接口如何定义和使用
    本篇内容介绍了“Java接口如何定义和使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、引入一方面,有时必须从几个类中派生出一个子类,继...
    99+
    2023-06-30
  • 详解如何熟练使用java函数式接口
    一、函数式接口的由来 我们知道使用Lambda表达式的前提是需要有函数式接口,而Lambda表达式使用时不关心接口名,抽象方法名。只关心抽象方法的参数列表和返回值类型。因此为了让我们...
    99+
    2024-04-02
  • Java使用Runnable和Callable实现多线程的区别详解
    使用Runnable和Callable接口实现多线程的区别 先看两种实现方式的步骤: 1.实现Runnable接口 public class ThreadDemo{ publ...
    99+
    2024-04-02
  • java中Serializable接口作用详解
    本文为大家解析java中Serializable接口的作用,具体内容如下 1.(serializable)主要支持对象的回复,所以可以用来保存当前的程序系统状态,远程方法调用RMI(远程机器必须含有必要的.class文件,否则将掷...
    99+
    2023-05-31
    java serializable 接口
  • Java抽象类和接口如何使用
    本文小编为大家详细介绍“Java抽象类和接口如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java抽象类和接口如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是抽象类什么是抽象类呢?抽象类顾名...
    99+
    2023-06-30
  • 如何在Java中使用RESTful接口
    如何在Java中使用RESTful接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、什么是APIAPI (应用程序编程接口) 两种用法类似jar的使用:A软件将功能打包...
    99+
    2023-06-15
  • Java使用Hutool调用WebService接口详解
    提示:本文显示baidu.com,皆为脱敏用,并非真正地址。 目录 前言 一、WebService是什么? 二、使用步骤 1.验证链接。 2.Soap调用测试 3.获取需要用到的数据 4.Hutool工具类调用 三、示例 1.单个入...
    99+
    2023-09-01
    1024程序员节
  • java中如何使用HttpClient调用接口
    目录java使用HttpClient调用接口HttpClient 提供的主要的功能直接言归正传了!!!!上代码java的HttpClient调用远程接口使用方法实例java使用Htt...
    99+
    2022-11-13
    java使用HttpClient HttpClient调用接口 java HttpClient
  • Java集合的Collection接口和List接口详解
    目录1集合的概念2 集合的父类Collection接口2.1常用方法2.2遍历 3 List接口3.1List接口常用方法3.2遍历4 集合中元素的去重总结1集合的概念 把...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作