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中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查 ...
最新文章
- 想读Spring源码?先从这篇「 极简教程」开始
- BZOJ-1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(SPFA)
- xgboost、随机森林和逻辑回归的优缺点
- Mono for Android 显示远程图片
- 中关键字 表示空类型_C语言数据类型
- 如何使用敏捷开发来赢得太阳能竞速赛
- 在JavaScript中解析查询字符串[重复]
- 双非院校,0项目经验,三个月入职大厂NLP算法岗,月薪30k+
- 财子说丨王国斌:相信时间的力量
- 商务与经济统计++原书第12版+[(美)安德森著][机械工业出版社][2015.07][515页][13854037]第一章读书笔记
- ANSI-美国国家标准学会
- FPGA信号截位策略
- word中首行缩进、悬挂缩进、左缩进有什么区别?如何操作?
- 论文精读 清华ERNIE:Enhanced Language Representation with Informative Entities
- sci国外期刊投稿过程(已完结)
- 董卫凤:不服输的华丽转身(一)
- 【大众点评评论爬虫】一键获取大众点评完整评论工具批量爬取保存为excel数据
- 配置Cross-Origin的几种方法
- 北京科技大学本科毕业论文答辩和论文选题PPT模板
- OpenCv打开摄像头失败问题处理cap_msmf.cpp (677) MFVideoFormat_RGB24(codec not found)