java future 不足_java Future用法和意义一句话击破
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。
所以run的返回值是void类型。
如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。
但后者需要前者的结果,就需要用callable接口了。
callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定。
线程是属于异步计算模型,所以你不可能直接从别的线程中得到函数返回值。
这时候,Future就出场了。Futrue可以监视目标线程调用call的情况,当你调用Future的get()方法以获得结果时,当前线程就开始阻塞,直接call方法结束返回结果。
下面三段简单的代码可以很简明的揭示这个意思:
runnable接口实现的没有返回值的并发编程。
callable实现的存在返回值的并发编程。(call的返回值String受泛型的影响)
同样是callable,使用Future获取返回值。
贴一个完整可运行的程序代码 FutureTest.java
package demo.future;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
* 试验 Java 的 Future 用法
*/
public class FutureTest {
public static class Task implements Callable {
@Override
public String call() throws Exception {
String tid = String.valueOf(Thread.currentThread().getId());
System.out.printf("Thread#%s : in call\n", tid);
return tid;
}
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
List> results = new ArrayList>();
ExecutorService es = Executors.newCachedThreadPool();
for(int i=0; i<100;i++)
results.add(es.submit(new Task()));
for(Future res : results)
System.out.println(res.get());
}
}
java future 不足_java Future用法和意义一句话击破相关推荐
- Java培训分享void的用法和意义
本文由小千分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查询结果,如下: ...
- java future接口_java Future 接口介绍
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.uti ...
- java终结方法_Java终结任务:Callable和Future
在这里首先介绍下Callable和Future,我们知道通常创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口,但是这两种方式创建的线程不返回结果,而Callable ...
- futuretask java 并发请求_Java并发机制(9)--Callable、Future、FutureTask的使用
Java并发编程:Callable.Future.FutureTask的使用 继承关系: 1.接口Callable与Runnable 1.1.Runnable接口中只有一个void run()方法,其 ...
- 【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想
相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...
- Java是如何实现Future模式的?万字详解!
1 Future是什么? 先举个例子,我们平时网购买东西,下单后会生成一个订单号,然后商家会根据这个订单号发货,发货后又有一个快递单号,然后快递公司就会根据这个快递单号将网购东西快递给我们.在这一过程 ...
- Java技术分享:void的用法和意义
本文小千分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查询结果,如下: ...
- Java多线程编程中Future模式的详解
转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...
- java里void的意思_void的用法和意义
本文由好程序员ava培训分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查 ...
最新文章
- QCon 2015 阅读笔记 - 团队建设
- pack unpakc
- cahrt框架 ios_iOS Charts框架集成及使用
- 分布式实时计算—Spark—Spark Core
- 【ArcGIS遇上Python】ArcGIS10.8 Python代码批量完美实现MODIS NDVI数据格式转换和投影变换
- 达梦数据库连接(单机、多实例、多数据源版本)
- STM32之窗口看门狗例程
- ROS笔记(13) 记录与回放数据
- 电子商务网站中订单号设计规则和依据
- 泛型ListT排序(利用反射)
- 【C/C++】各种数据类型在16位、32位和64位系统下所占字节差异
- 本博客自排名1000到400的各项数据变化
- sxssfworkbook 设置单元格大小_Offset属性和Resize属性相结合,完美实现选择区域大小的改变...
- IPIP.Net地址库格式分析
- 微软输入法数字有间隔_各种中文输入法中输入间隔号“·”的措施
- 路飞学城python电子书闲鱼_路飞学城-python开发集训-第一章之用户登陆做业
- Flink在监控流计算中的应用
- 3.5 Python 实例4-文本进度条
- 关于 arm 和 x86 架构的思考
- 抓取腾讯动漫app的插图链接
热门文章
- Oracle默认的用户名和密码
- CITRIX:为什么说“桌面虚拟化”我们最强?
- 给深受【应用程序未安装】困扰并且找不到【smdl2tmp1.asec】系统的机友们
- 人生苦短之---第一个Python程序
- [GO]无缓冲通道(unbuffered channel)
- 找2个数组中相同的数
- ++[[]][+[]]+[+[]] == 10 //true
- 【ssm】极简的极省力的开发方式——针对简单型EasyUI的增删改查的后台管理
- 【logstash】logstash monitor
- 【线程】——线程安全问题