Java Future

java jdk里面的线程池蛮好用的,之前看的时候忽略掉了一个很好玩的类Future, 顺便记录一下, 这方面的博客很多,就不多说了

java Future 设计模式:http://www.2cto.com/kf/201411/351903.html

javaFuture ExecutorService: http://blog.csdn.net/wei369924173/article/details/7992642

java线程池:http://my.oschina.net/u/1398304/blog/376827

这里贴下我的测试代码:

public class Test {

String result;

public static final void main(String argvs[]) throws InstantiationException, IllegalAccessException, InterruptedException, ExecutionException{

  ExecutorService services = Executors.newFixedThreadPool(2);

  final Test test = (Test) Test.class.newInstance();

   Future<Test> future = services.submit(new Runnable(){

    public void run() {

      test.result = "start";

    try {

    Thread.sleep(5000);

    } catch (InterruptedException e) {

    e.printStackTrace();}

    test.result = "end";

    }

   }, test);

//做其他的事情

    System.out.println("1: result="+future.get().result); //阻塞方法

}

}

等待一段时间后输出:1:result=end

特别注意的事,future.cancel(boolean)方法, 这个方法参数如果是true,那么正在执行被取消任务的线程的中段标志会被置为true, 换句话说,只有执行任务的时候判断了中断状态,被中断就结束任务,否则任务还会继续执行完

java thread中断:http://blog.csdn.net/sunxing007/article/details/9123363

时间: 2024-10-11 05:37:38

Java Future的相关文章

Java Future模式实现

Java Future模式简介 Future模式是Java多线程常用的模式,而且JDK也内置对Future模式的支持,比如在java.util.concurrent包下的FutureTask类.其核心思想在于:发出请求后,可以立即返回对象,但是这个对象实际上是个假对象,并不可立即使用,但是我们可以在干点别的事情后,就可以使用这个假对象获取结果了.这是为什么呢?因为在返回假对象的时候,偷偷的开启了一个线程去请求真正的结果数据.那么下面,我们来模拟实现下Future模式. 代码实现与分析 主流程是:

从Java future 到 Guava ListenableFuture实现异步调用

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/51232004 前言 随着移动互联网的蓬勃发展,手机App层出不穷,其业务也随之变得错综复杂.针对于开发人员来说,可能之前的一个业务只需要调取一次第三方接口以获取数据,而如今随着需求的增加,该业务需调取多个不同的第三方接口.通常,我们处理方法是让代码同步顺序的去调取这些接口.显然,调取接口数量的增加必然会造成响应时间的增加,势必会对系统性能造成一定影响. 为

java Future FutureTask 并发操作

1.1 综述 创建线程有两种方式:extends Thread || inplements Runable,但是这两种方式都有一个缺陷,就是执行完任务后不能获取执行结果. 如果非要获取到执行结果的话,就必须通过共享变量或者是线程通信的方法来达到效果,使用较为麻烦,为了解决这种问题,java提供了Callable Future ,通过他们可以再任务执行完毕后得到任务执行结果. 1.2 Runable Callable 对比 java.lang.Runable是一个接口,声明了run()方法: pu

java future模式 所线程实现异步调用(转载

java future模式 所线程实现异步调用(转载) 在多线程交互的中2,经常有一个线程需要得到另个一线程的计算结果,我们常用的是Future异步模式来加以解决.Future顾名思意,有点像期货市场的“期权”,是“对未来的一种凭证”,例如当我们买了某个房地产开发商的期房,交钱之后,开发商会给我们一个凭证(期权),这个凭证告诉我们等明年某个时候拿这个凭证就可以拿到我们所需要的房子,但是现在房子还没建好.市场上之所以有“期货”,也正由于有这种需求,才有这种供给. 这种应用在GUI上用的比较多,在设

从Java Future到Guava ListenableFuture实现异步调用

原文地址: http://blog.csdn.net/pistolove/article/details/51232004 Java Future ????通过Executors可以创建不同类似的线程池,常见的大概有下表几种类型,还有些可能为被列出.在实际应用中,个人感觉主要使用newCachedThreadPook和newFixedThreadPool来创建线程池. Executors创建线程池源码 //调用newCachedThreadPool方法,可以创建一个缓冲型线程池,而在改方法中通过

java Future模式

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Future模式,关于其他多线程设计模式的地址如下:关于其他多线程设计模式的地址如下:关于Master-Worker模式的详解: Java多线程编程中Master-Worker模式的详解关于Guarded Suspeionsion模式的详解: Java多线程编程中Guarded Suspeionsion模式

java Future 接口介绍

(转自:http://blog.csdn.net/yangyan19870319/article/details/6093481) 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.util.concurrent包中.Future接口是Java线程Future模式的实现,可以来进行异步计算. Future模式可以这样来描述:我有一个任务,提交给了Futu

java Future用法和意义一句话击破 [转]

在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是void类型. 如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算. 但后者需要前者的结果,就需要用callable接口了. callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定. 线程是属于异步计算模型,所以你不可能直接从别的线程中得到函数返回值. 这时候,Future就出场了.Futr

java Future模式核心思想(转)

Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑(根据<Java程序性能优化>). Future模式有点类似于商品订单.在网上购物时,提交订单后,在收货的这段时间里无需一直在家里等候,可以先干别的事情.类推到程序设计中时, 当提交请求时,期望得到答复时,如果这个答复可能很慢.传统的时一直等待到这个答复收到时再去做别的事情,但如果利用Future设计模式就无需等待答复 的到来,在等待答复的过程中可以干其他事情. 例如如下的请求调用过程时序图.