`
xly_971223
  • 浏览: 1277462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程模式之Future Pattern

    博客分类:
  • java
 
阅读更多
Future模式在jdk5中有实现
其特点是:不阻塞等待函数的执行结果,而是立即返回一个Future对象,Future对象就像一个提货单,等函数执行完成再去提货

核心类是 Host 和 FutureData

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		Host host = new Host();
		Data f1 = host.request(5, 'c');
		Data f2 = host.request(5, 'd');
		Data f3 = host.request(5, 'e');
		
		Thread.sleep(2000);
		System.out.println(f1.getData());
		

	}

}

package com.justel.fs.future;

public class FutureData implements Data{
	private boolean ready = false;  //readData是否已经完成
	private RealData realData;

	@Override
	public synchronized String getData() {
		while(!ready){
			try {
				wait();
			} catch (InterruptedException e) {
			}
		}
		return realData.getData();
	}

	public RealData getRealData() {
		return realData;
	}

	public synchronized void setRealData(RealData realData) {
		if(ready) return;
		this.realData = realData;
		ready = true;
		notifyAll();
	}


}
package com.justel.fs.future;

public class RealData implements Data{
	private int n;
	private char c;
	
	public RealData(int n, char c){
		this.n = n;
		this.c = c;
	}


	@Override
	public String getData() {
		String string = "";
		try {
			for (int i = 0; i < n; i++) {
				string += c;
				Thread.sleep(1000);
			}
		} catch (InterruptedException e) {
		}
		
		return string;
	}

}
package com.justel.fs.future;

public class Host {

	public Data request(final int n, final char c){
		final FutureData futureData = new FutureData();
		
		new Thread(){
			public void run(){
				RealData realData = new RealData(n, c);
				futureData.setRealData(realData);
			}
		}.start();
		
		return futureData;
	}
	
}
分享到:
评论

相关推荐

    java多线程设计模式

    Java多线程设计模式是Java编程中不可或缺的一部分,它涉及到如何在并发环境中高效、安全地组织代码执行。在Java中,多线程是通过Thread类或实现Runnable接口来创建和管理的。本教程将深入探讨多线程设计模式,帮助...

    java多线程_设计模式_各种技术(我的书架)

    另外,观察者模式(Observer Pattern)在多线程环境中也常被用到,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这在并发编程中可以用来实现事件驱动...

    两个设计模式与一个线程回调

    在"DesignPattern2ThreadCallback"这个主题中,我们可以深入学习如何在实际项目中结合设计模式和线程回调,以构建高效、可维护的多线程应用程序。通过理解并熟练运用这些概念,开发者能够编写出更加灵活、可扩展的...

    良葛格DesignPattern学习笔记

    良葛格的《Design Pattern学习笔记》不仅涵盖了经典的GOF设计模式,还额外介绍了几种多线程模式,这使得这份学习笔记成为了一个宝贵的学习资源。下面将对其中的部分设计模式进行详细介绍。 #### 二、GOF设计模式 ...

    Future Patter 改进了一点点的代码

    对结城浩的Future Pattern的代码做了一点儿小小的改进(见blog)。

    基于Java的源码-java多线程反射泛型及正则表达式学习笔记和源码.zip

    在这个基于Java的源码压缩包中,我们主要探讨四个核心概念:多线程、反射、泛型和正则表达式。这些是Java开发中的重要工具,对于理解和优化程序性能至关重要。 首先,多线程在Java中是一个基础且关键的概念,它允许...

    生成者消费者模式 代码

    生成者消费者模式是一种经典的多线程设计模式,它在并发编程中被广泛应用,尤其是在资源有限、需要高效利用系统资源的场景下。这个模式的核心思想是通过协调生产者和消费者线程,使得生产者不直接向消费者提供产品,...

    java 子线程通过观察者模式通知主线程

    在多线程环境下,观察者模式可以被巧妙地应用于子线程通知主线程的情况。 观察者模式的核心思想是定义一个一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,`...

    java并发编程:设计与模式

    此外,生产者-消费者模式(Producer-Consumer Pattern)在并发编程中也非常重要,它的应用场景广泛,可以帮助开发者在多线程之间协调工作和资源的分配。 Java并发编程还涉及到线程池的设计。线程池管理一组工作线程...

    Scala设计模式

    - **可能增加代码复杂度:** 特别是在多线程环境中需要考虑同步问题,可能会使代码变得更加复杂。 #### 三、结构型模式 ##### 1. 适配器模式 适配器模式允许将一个类的接口转换成客户希望的另一个接口。这种类型...

    20.9.24aqs-并发编程笔记.pdf

    保护性暂停模式(Guarded Suspension Design Pattern)是一种在多线程环境下实现线程之间安全地传递信息的模式。这种模式主要解决了在并发编程中如何安全高效地进行线程间通信和数据传递的问题。 该模式的基本概念...

    java源码:车间管控.rar

    Java提供了Thread类和Runnable接口来支持多线程编程,同时,高级的并发工具如ExecutorService和Future使得线程管理更为高效。 3. **数据持久化**:为了保存和恢复数据,Java源码可能会使用数据库连接池(如C3P0或...

    VC++ 多程异步的应用

    在编程领域,多线程和异步处理是提高应用程序性能和响应能力的重要技术。尤其是在VC++(Microsoft Visual C++)环境中,多线程和异步编程可以帮助开发者充分利用现代多核处理器的优势,为用户带来更流畅的体验。本文...

    JAVA并发编程实践 EN(全)

    6. **并发编程模式**:介绍如双检锁/双重校验锁(DCL)、生产者消费者模式、读写锁、未来的值(Future Pattern)等并发编程模式,帮助开发者解决实际问题。 7. **线程通信**:讲解wait()、notify()和notifyAll()...

    concurrent_programming_in_java_design_principles_a_Currency_desi

    在这个主题中,我们将深入理解如何在多线程环境中有效地处理货币计算,避免数据不一致性和竞态条件。 首先,让我们来看看"currency design pattern"。设计模式是软件设计中的一种最佳实践,是解决特定问题的模板。...

    Java Concurrency In Practice.pdf

    本书深入探讨了Java平台上的多线程编程技巧,并提供了大量实用案例来帮助读者理解如何有效地利用Java语言特性构建高效、可维护的多线程应用。 #### 二、并发基础 ##### 2.1 什么是线程安全? 线程安全是指在多线程...

    【IT十八掌徐培成】Java基础第20天-02_推送好友列表.zip

    这涉及到Java编程中的多个知识点,包括但不限于网络通信、数据结构、多线程以及可能的异步处理等。下面将对这些关键知识点进行详细的阐述。 首先,Java在网络通信方面的应用是广泛的,这里提到的“推送”可能涉及到...

    aqs-并发编程(2)笔记.pdf

    在并发编程中,保护性暂停模式(Guarded Suspension Design Pattern)是一种常用...不过需要注意的是,在实现的时候要考虑到多线程环境中可能出现的竞态条件、死锁和资源竞争等问题,并采取相应的措施进行预防和解决。

    这个才是POSA4英文

    第四卷《Pattern-Oriented Software Architecture Volume 4》专注于并发与分布式计算领域,其英文版在2007年发布,提供了关于如何在多线程、并行和分布式环境设计高效系统的深入见解。 本书主要知识点包括: 1. **...

    Java 从txt文件查找数据

    如果需要同时处理多个txt文件或并行查找,可以利用Java的多线程特性,如`Thread`、`ExecutorService`和`Future`。这样可以提高程序的执行效率。 7. 实际应用: 这种技术广泛应用于日志分析、数据挖掘、文本处理等...

Global site tag (gtag.js) - Google Analytics