前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Future,带返回执行结果的线程使用方式

Future,带返回执行结果的线程使用方式

作者头像
用户1215919
发布于 2018-02-27 02:41:48
发布于 2018-02-27 02:41:48
1.1K00
代码可运行
举报
文章被收录于专栏:大大的微笑大大的微笑
运行总次数:0
代码可运行

FutureTask是Future的一种实现方式.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private final int count;

	public Counter(int count) {
		this.count = count;
	}

	public void get() throws InterruptedException {
		// 假设执行一些耗时的操作
		Thread.sleep(3000);
		System.out.println("counter:" + count);
	}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
long start = System.currentTimeMillis();
		FutureTask<Counter> f = new FutureTask<Counter>(new Callable<Counter>() {
			@Override
			public Counter call() throws Exception {
				System.out.println("==================");
				return new Counter(1000);
			}

		});
		f.run();
		if (f.isDone()) {
			System.out.println("done.time-consuming:"
			        + (System.currentTimeMillis() - start) + "ms");
			f.get().get();
		}

控制台:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
==================
done.time-consuming:1001ms
counter:1000
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Callable与Future介绍
在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口。然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果。我们一般只能采用共享变量或共享存储区以及线程通信的方式实现获得任务结果的目的。不过,Java中,也提供了使用Callable和Future来实现获取任务结果的操作。Callable用来执行任务,产生结果,而Future用来获得结果。
HLee
2021/10/13
1K0
Callable与Future介绍
Future和Callable学习
我们知道使用多线程时,最初的Thread到线程池,此时对于线程的使用,提供了其使用的复用率。而实现多线程的三种方式:继承Thread;实现Runnable接口,重写run方法;实现Callable接口,同时重写call方法,同时通过Future获取执行的返回值。也就是说callable执行任务,而Future拿到执行的结果。Future具有阻塞性在于其get()方法具有阻塞性,而isDone()是不具有阻塞性的。
路行的亚洲
2020/07/16
4850
采用线程池进行异步任务处理
被@Async修饰的方法叫做异步方法,这些异步方法会在新的线程中进行处理,不影响主线程的顺序执行。
春哥大魔王
2018/07/23
3.2K0
Java并发编程之Future和FutureTask
搞过Java或者客户端Android开发的都知道,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。不过,这2种方式都有一个缺陷,就是在执行完任务之后无法获取执行结果。
xiangzhihong
2022/11/30
3510
【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想
Future模式有点类似于网上购物,在你购买商品,订单生效之后,你可以去做自己的事情,等待商家通过快递给你送货上门。Future模式就是,当某一程序提交请求,期望得到一个答复。但是可能服务器程序对这个请求的处理比较慢,因此不可能马上收到答复。但是,在传统的单线程环境下,调用函数是同步的,它必须等到服务程序返回结果,才能继续进行其他处理。而Future模式下,调用方法是异步的,原本等待返回的时间段,在主调函数中,则可以处理其他的任务。传统的串行程序调用如下图所示:
YourBatman
2019/09/03
2K0
【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想
J.U.C源码实战:Future编码实战与优缺点
在现代并发编程中,Java 的 Future 接口提供了一种处理异步计算结果的机制。Future 是 Java 5 中引入的 java.util.concurrent 包的一部分,用于表示一个任务的未来结果。随着应用程序需求的复杂化和多线程编程的普及,理解和运用 Future 变得尤为重要。本篇文章将深入探讨 Java 中 Future 的概念、使用方法及其在实际编程中的应用场景。通过学习这篇文章,读者将能够掌握如何使用 Future 接口进行异步操作,提升程序的性能和响应速度。此外,我们还将介绍与 Future 相关的其他关键类和接口,如 Callable 和 ExecutorService,以帮助读者全面了解并发编程的相关知识。无论你是刚接触 Java 并发编程的新手,还是希望深入理解和优化异步任务处理的开发者,这篇文章都将为你提供有价值的指导和参考。让我们一同开启对 Java Future 的学习之旅,探索并发编程的奥秘。
怒放吧德德
2024/06/23
1720
Java 还有第三种创建多线程的方式?
我们在多线程编程中最常用的两种方式:一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。
互扯程序
2019/06/19
4760
【小家Java】Future、FutureTask、CompletionService、CompletableFuture解决多线程并发中归集问题的效率对比
开启线程执行任务,不管是使用Runnable(无返回值不支持上报异常)还是Callable(有返回值支持上报异常)接口,都可以轻松实现。那么如果是开启线程池并需要获取结果归集的情况下,如何实现,以及优劣?
YourBatman
2019/09/03
2.6K1
【小家Java】Future、FutureTask、CompletionService、CompletableFuture解决多线程并发中归集问题的效率对比
Java中实现多线程的四种方式
Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。
Kevin_Zhang
2019/02/20
5410
Java中Future的使用场景和解析
我们通常都是开启一个新的子线程去执行比较耗时的代码,这使用起来非常简单,只需要将耗时的代码封装在Runnable中的run()方法里面,然后调用thread.start()就行。但是我相信很多人有时候都有这样的需求,就是获取子线程运行的结果,比如客户端远程调用服务(耗时服务),我们有需要得到该调用服务返回的结果,这该怎么办呢?很显然子线程运行的run()方法是没有返回值。这个时候Future的作用就发挥出来了。
全栈程序员站长
2022/07/04
3720
Java中Future的使用场景和解析
异步编程 - 04 基于JDK中的Future实现异步编程(上)_Future & FutureTask 源码解析
在Java并发包(JUC包)中Future代表着异步计算结果,Future中提供了一系列方法用来
小小工匠
2023/09/07
2400
异步编程 - 04 基于JDK中的Future实现异步编程(上)_Future & FutureTask 源码解析
Java线程的基本使用
在Java中使用多线程,本质上还是对Thread对象的操作。线程池只是为了方便对线程的管理,避免频繁的创建和销毁线程带来不必要的系统开销,内部通过指定的线程数和阻塞队列实现。
spilledyear
2019/12/24
5930
Java线程池原理讲解
  线程池应该是Web容器中必不可少的组件了,因为每一个请求我们都需要通过对应的线程来处理,所以线程资源是非常重要的,如果管理不好系统的性能会急剧下降。所以重要性不言而喻。来看看它的有点吧。
用户4919348
2022/04/13
5720
Java线程池原理讲解
Java线程池异常处理
ThreadPoolExecutor 的 execute 方法不用过多分析, 就是线程池的执行流程, 这里看看 submit:
leobhao
2023/03/11
4000
Future:异步任务结果获取
我们之前说过如何正确创建线程池,我们详细介绍了怎么合理使用线程池,我们也只是介绍了 ThreadPoolExecutor的void execute(Runnable command)方法,利用这个我们可以提交任务,让线程去消费处理,但是没有办法获取任务的执行结果。因为该方法没有返回值。而有一些场景我们需要获取任务的执行结果再判断逻辑。
码哥字节
2020/03/24
2.2K0
Future:异步任务结果获取
Java并发编程系列-(2) 线程的并发工具类
JDK 7中引入了fork-join框架,专门来解决计算密集型的任务。可以将一个大任务,拆分成若干个小任务,如下图所示:
码老思
2023/10/19
2310
Java并发编程系列-(2) 线程的并发工具类
JUC系列(六) | Callable和Future接口详解&使用、FutureTask应用 获取异步线程返回值
在上上篇文章中,创建线程那个小角落,提到了这个,但是当时只是匆匆忙忙讲了一下。到这里再全面性的讲解一下。
宁在春
2022/10/31
1K0
JUC系列(六) | Callable和Future接口详解&使用、FutureTask应用 获取异步线程返回值
【Java多线程-3】Future与FutureTask
前文中我们讲述了创建线程的2种方式:直接继承Thread和实现Runnable接口,但这两种方式在执行完任务之后都无法获取执行结果。 自从Java 5开始,JDK提供了Callable和Future,解决了上述问题,通过它们可以在任务执行完毕之后得到任务执行结果。
云深i不知处
2020/09/16
3680
Java 异步编程实战之基于 JDK 中的 Future 实现异步编程|送书
本节主要讲解如何使用JDK中的Future实现异步编程,这包含如何使用FutureTask实现异步编程以及其内部实现原理以及FutureTask的局限性。
江南一点雨
2020/01/13
1.8K1
Java 异步编程实战之基于 JDK 中的 Future 实现异步编程|送书
java高并发系列 - 第19天:JUC中的Executor框架详解1
Executors框架是Doug Lea的神作,通过这个框架,可以很容易的使用线程池高效地处理并行任务。
路人甲Java
2019/12/10
8280
推荐阅读
相关推荐
Callable与Future介绍
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文