在并发编程时,一般使用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. QCon 2015 阅读笔记 - 团队建设
  2. pack unpakc
  3. cahrt框架 ios_iOS Charts框架集成及使用
  4. 分布式实时计算—Spark—Spark Core
  5. 【ArcGIS遇上Python】ArcGIS10.8 Python代码批量完美实现MODIS NDVI数据格式转换和投影变换
  6. 达梦数据库连接(单机、多实例、多数据源版本)
  7. STM32之窗口看门狗例程
  8. ROS笔记(13) 记录与回放数据
  9. 电子商务网站中订单号设计规则和依据
  10. 泛型ListT排序(利用反射)
  11. 【C/C++】各种数据类型在16位、32位和64位系统下所占字节差异
  12. 本博客自排名1000到400的各项数据变化
  13. sxssfworkbook 设置单元格大小_Offset属性和Resize属性相结合,完美实现选择区域大小的改变...
  14. IPIP.Net地址库格式分析
  15. 微软输入法数字有间隔_各种中文输入法中输入间隔号“·”的措施
  16. 路飞学城python电子书闲鱼_路飞学城-python开发集训-第一章之用户登陆做业
  17. Flink在监控流计算中的应用
  18. 3.5 Python 实例4-文本进度条
  19. 关于 arm 和 x86 架构的思考
  20. 抓取腾讯动漫app的插图链接

热门文章

  1. Oracle默认的用户名和密码
  2. CITRIX:为什么说“桌面虚拟化”我们最强?
  3. 给深受【应用程序未安装】困扰并且找不到【smdl2tmp1.asec】系统的机友们
  4. 人生苦短之---第一个Python程序
  5. [GO]无缓冲通道(unbuffered channel)
  6. 找2个数组中相同的数
  7. ++[[]][+[]]+[+[]] == 10 //true
  8. 【ssm】极简的极省力的开发方式——针对简单型EasyUI的增删改查的后台管理
  9. 【logstash】logstash monitor
  10. 【线程】——线程安全问题