java future模式举例
——我一直不太信任自己的记忆力,所以我把它们都写下来
Future模式在java中简单使用
直接模拟场景,然后看实例,一直以来喜欢这种直接的方式:有两个比较耗时的计算过程,一个耗时5秒,一个耗时2秒,那我们怎么在5秒时得到计算结果?
先是普通的做法
public class ExeCutorTest { /** * @param args */ public static void main(String[] args) { //计时开始 Long beg = new Date().getTime(); System.out.println("结果"+(calcA()+calcB())); //执行完成后话费的时间 System.out.println("花费时间"+(new Date().getTime()-beg)); } //耗时操作A需要2000毫秒 public static int calcA(){ int count = 50; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } //耗时操作B需要5000毫秒 public static int calcB(){ int count = 100; try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } }
运行控制台输出结果如下,如我们所料是7000毫秒也就是7秒;
结果150
花费时间7000
下面是使用Future模式的改良版
public class ExeCutorTest { /** * @param args */ public static void main(String[] args) { // 计时开始 Long beg = new Date().getTime(); FutureTask<Integer> task = new FutureTask<Integer>( new Callable<Integer>() { @Override public Integer call() throws Exception { return calcB(); } }); Thread t = new Thread(task); t.start(); try { System.out.println("结果" + (calcA() + task.get())); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } // 执行完成后话费的时间 System.out.println("花费时间" + (new Date().getTime() - beg)); } // 耗时操作A需要2000毫秒 public static int calcA() { int count = 50; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } // 耗时操作B需要5000毫秒 public static int calcB() { int count = 100; try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } }
控制台打印输出的结果:
结果150
花费时间5005
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
老生常谈java中的Future模式 在 Java 中,Future 模式是一种常用的设计模式,用于处理并发编程中的多线程问题。在这个模式中,线程 A 需要等待线程 B 的结果,但线程 A 不需要一直等待线程 B,可以先拿到一个未来的...
Java的Future编程模式是Java并发处理中的核心概念,主要用于处理异步计算的结果。在Java的`java.util.concurrent`包中,`Future`接口扮演着重要角色,它提供了一种方式来管理和检索由其他线程执行的异步任务的结果。...
"Java使用Callable和Future创建线程操作示例" Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作...
在Java并发编程中,Future模式是一种常见的设计模式,它允许主线程在不阻塞的情况下启动一个异步任务,然后在需要时获取任务的结果。Future模式的灵感来源于现实生活中的场景,如本文开头提到的买午餐和牙膏的例子,...
NULL 博文链接:https://waitingkkk-163-com.iteye.com/blog/2232286
Java设计模式和并发编程是Java开发中的两个重要领域,它们对于构建高效、可维护的软件系统至关重要。设计模式是经过时间验证的解决常见问题的最佳实践,而并发编程则是利用多核处理器的优势,提高应用程序的执行效率...
通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA设计模式的一本好书。(注意,本资源附带书中源...
《Java与模式》是一本深入探讨Java编程语言与设计模式结合的经典著作,旨在帮助开发者更好地理解和应用面向对象设计原则。源代码是书籍内容的重要组成部分,它提供了实际的示例,让读者可以动手实践,加深对书中理论...
JAVA设计模式是软件开发中的一种重要思想,它总结了在解决特定问题时代码组织和重用的最佳实践。设计模式提供了一种通用的语言,使得开发者能够更有效地交流和复用已经验证过的解决方案。以下是对这些主要设计模式的...
Java提供了多种并发工具和API,如ExecutorService、Future、Semaphore、CountDownLatch等,帮助开发者有效地管理和协调并发任务。 接着,我们将会学习到Java中的线程和进程概念。线程是程序执行的最小单元,而进程...
在Java编程领域,多线程设计模式是一种至关重要的技术,特别是在构建高效、可扩展和并发的应用程序时。本文将深入探讨Java多线程设计模式及其源代码,旨在帮助开发者理解和应用这些模式,提升代码的并发性能和可维护...
在Java中,Future和FutureTask都是用于获取线程执行的返回结果,但是它们之间存在一些差异和关联。本文将详细介绍Future和FutureTask的关系、使用和分析。 一、Future介绍 Future位于java.util.concurrent包下,是...
Java中的`Future`接口是Java并发编程中一个重要的概念,它是`java.util.concurrent`包下的一个接口,主要用于处理异步计算的结果。`Future`接口提供了一些方法来检查任务是否完成,获取或取消任务的结果,以及在必要...
Java Future类是一种并发编程中的一种设计模式,Future它代表一个异步计算的结果。Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。 在...
3. 同步和通信模式:探讨在多线程程序中,线程间的同步机制和通信手段,如信号量、栅栏、Future模式等。 4. 并发集合和映射的设计模式:介绍在多线程环境中,如何安全地使用集合数据结构,以及专门针对并发访问设计...
Future模式核心思想是异步调用,这里具体实现代码,其思想是:网上订了一个货之后,他会立即返回下好订单给你,你可以去做其他事,不用再一直等这个货物到达,以后有时间,货物到了,你就可以拿这个订单,去取货。...
Java的`Future`接口和`Callable`接口结合`ExecutorService`可以实现这一模式,提高程序的响应速度。 八、线程局部变量模式 线程局部变量(`ThreadLocal`)为每个线程提供独立的变量副本,避免了多线程环境下的数据...
《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java多线程编程技术的权威著作。这本书详细阐述了在Java平台中进行高效并发处理的关键概念、设计原则和实用模式。以下是对该书内容的一些核心知识点的概述...
在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的支持。 1. **`Observable`类**:代表被观察的对象,可以注册多个观察者,并在状态改变时通知它们。`Observable`类提供了`...
`Callable`和`Future`的组合是Java并发包中一个强大的工具,它弥补了`Runnable`接口的不足,使得异步编程可以获取到返回值并处理异常。同时,`ExecutorService`作为线程池的实现,为并发编程提供了一种优雅的解决...