八、阻塞等待异步结果FutureTask
一、简介
默认的异步任务有些难以控制,有时候我们希望在当前线程获取异步任务的结果。FutureTask可以帮助我们实现
JDK文档:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/FutureTask.html
FutureTask实现了RunnableFuture接口,而RunnableFuture接口继承了Runnable和Future。
同时,FutureTask接收一个Callable接口的实现类构造实例,在Runnable的run方法被执行的时候会去调用Callable的call方法,然后将处理结果set到输出对象里面去。
Future的get方法,将获取该输出值,作为异步线程的返回结果。
二、代码示例
以下代码,我们创建了FutureTask实例,然后将它丢给一个线程去执行。
再调用get方法阻塞等待异步结果,异步线程执行futureTask以后,返回结果。get方法获取结果以后,停止阻塞状态,打印结果。
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; public class FutureTaskDemo { public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<String> futureTask = new FutureTask<>(() -> {
System.out.println("future task is called");
Thread.sleep(2000);
return "futureTask is done";
});
new Thread(futureTask).start();
System.out.println(futureTask.get());
}
}
八、阻塞等待异步结果FutureTask的更多相关文章
- 网络IPC:套接字之非阻塞和异步I/O
通常,recv函数没有数据可用时会阻塞等待.同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞.在套接字非阻塞模式下,行为会改变.在这种情况下,这些函数不会阻塞而是失败,设置errno ...
- C# 委托高级应用----线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
- 谈.Net委托与线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
- 阻塞 , 非阻塞 , 同步 ,异步 , I/O模型
•阻塞,非阻塞:进程/线程要访问的数据是否就绪,进程/线程是否需要等待: •同步,异步:访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞:异步只需要I/O操作完成的通知,并不主动读写 ...
- GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调
GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents ...
- Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程
Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...
- java的高并发IO原理,阻塞BIO同步非阻塞NIO,异步非阻塞AIO
原文地址: IO读写的基础原理 大家知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用.在不同的操作系统中,IO读写的系统调用的名称可能不完 ...
- 阻塞IO,非阻塞IO,异步IO和非异步IO 的区别
最近在研究java IO.NIO.NIO2(或者称AIO)相关的东西,有些概念还是要明确下. 按照<Unix网络编程>的划分,IO模型可以分为:阻塞IO.非阻塞IO.IO复用.信号驱动IO ...
- Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程
Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程 一丶获取进程以及父进程的pid 含义: 进程在内存中开启多个,操作系统如何区分这些进程, ...
随机推荐
- java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)
在JavaWeb中的监听器分类 在Javaweb中存在三个被监听对象: HttpServletRequest HttpSessoin ServletContext 监听者 被监听者 监听到事件对象 H ...
- datatime模块
https://www.cnblogs.com/cindy-cindy/p/6720196.html
- 【Oracle 12c】最新CUUG OCP-071考试题库(54题)
54.(12-15) choose the best answer: View the Exhibit and examine the structure of the ORDER_ITEMS and ...
- php 递归数据,三维数组转换二维
public function sortarea($area, $parent_id = 0, $lev = 1){ static $list; foreach($area as $v){ if($v ...
- Android实用代码片段
有时候,需要一些小的功能,找到以后,就把它贴到了博客下面,作为留言,查找起来很不方便,所以就整理一下,方便自己和他人. 一. 获取系统版本号: 1 PackageInfo info = this.g ...
- Mac中搭建 iOS 的 React Native 环境
手把手教你在Mac中搭建iOS的 React Native环境 http://www.cnblogs.com/damnbird/p/6074607.html 准备工作 1.你需要一台Mac电脑..(这 ...
- FTP在docker容器中上传失败解决,改为被动模式
package com.mayocase.takeout.utils; import org.apache.commons.net.ftp.FTPClient; import org.apache.c ...
- java连接SqlServer2012
要用java连接数据库 首先是要通过JDBC驱动 要先去下载一个sqljdbc4.jar,我这里放百度云盘了, 下载地址:链接:http://pan.baidu.com/s/1slJl89B 密码: ...
- chainWebpack 和 htmlWebpackPlugin搭配使用
const HtmlWebpackPlugin = require('html-webpack-plugin'); ... chainWebpack: config => { config .p ...
- jquery中ajax使用error调试错误的方法,实例分析了Ajax的使用方法与error函数调试错误的技巧
代码:$(document).ready(function() { jQuery("#clearCac").click(function() { jQuery.ajax({ url ...