在并发编程时,一般使用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用法和意义一句话击破相关推荐

  1. Java培训分享void的用法和意义

    本文由小千分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查询结果,如下: ...

  2. java future接口_java Future 接口介绍

    在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.uti ...

  3. java终结方法_Java终结任务:Callable和Future

    在这里首先介绍下Callable和Future,我们知道通常创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口,但是这两种方式创建的线程不返回结果,而Callable ...

  4. futuretask java 并发请求_Java并发机制(9)--Callable、Future、FutureTask的使用

    Java并发编程:Callable.Future.FutureTask的使用 继承关系: 1.接口Callable与Runnable 1.1.Runnable接口中只有一个void run()方法,其 ...

  5. 【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  6. Java是如何实现Future模式的?万字详解!

    1 Future是什么? 先举个例子,我们平时网购买东西,下单后会生成一个订单号,然后商家会根据这个订单号发货,发货后又有一个快递单号,然后快递公司就会根据这个快递单号将网购东西快递给我们.在这一过程 ...

  7. Java技术分享:void的用法和意义

    本文小千分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查询结果,如下: ...

  8. Java多线程编程中Future模式的详解

    转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...

  9. java里void的意思_void的用法和意义

    本文由好程序员ava培训分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查 ...

最新文章

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

热门文章

  1. 解决android混淆编译出现Proguard returned with error code 1和文件名、目录名或卷标语法不正确错误...
  2. 函数 的 重载 和 函数 模版
  3. 利用ResultFilter实现asp.net mvc 页面静态化
  4. 使用NPM和Nodejs编写编译工具
  5. JavaScript遇到浏览器不兼容与解决方案
  6. 测试SQLServer拆分字符串到临时表
  7. firefox使用技巧 - 公司内部站点
  8. Openwrt 软件安装源
  9. Mininet与真实网络链接的方法
  10. 高并发秒杀系统--Service事务管理与继承测试