`
pan_java
  • 浏览: 287893 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

多线程设计模式 -- futrue

阅读更多
数据接口
public interface Data {
    public abstract String getContent();
}


真正需要的数据对象
public class RealData implements Data {
    private final String content;
    public RealData(int count, char c) {
        System.out.println("        making RealData(" + count + ", " + c + ") BEGIN");
        char[] buffer = new char[count];
        for (int i = 0; i < count; i++) {
            buffer[i] = c;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
            }
        }
        System.out.println("        making RealData(" + count + ", " + c + ") END");
        this.content = new String(buffer);
    }
    public String getContent() {
        return content;
    }
}



//异步数据
public class FutureData implements Data {
	private RealData realdata = null;
	private boolean ready = false;

	public synchronized void setRealData(RealData realdata) {
		//如果已经准备好直接返回不用再设置
		if (ready) {
			return; // balk
		}
		this.realdata = realdata;
		//设置值已准备好
		this.ready = true;
		//唤醒等待线程
		notifyAll();
	}

	public synchronized String getContent() {
		//如没有准备好,线程等待
		while (!ready) {
			try {

				wait();
			} catch (InterruptedException e) {
			}
		}
		return realdata.getContent();
	}
}



获取数据代理类
public class Host {
    public Data request(final int count, final char c) {
        System.out.println("    request(" + count + ", " + c + ") BEGIN");

        // (1) 建立FutureData的实体
        final FutureData future = new FutureData();

        // (2) 为了建立RealData的实体,启动新的线程
        new Thread() {                                      
            public void run() {                             
                RealData realdata = new RealData(count, c);
                future.setRealData(realdata);
            }                                               
        }.start();                                          

        System.out.println("    request(" + count + ", " + c + ") END");

        // (3) 取回FutureData实体,作为传回值
        return future;
    }
}


//测试类
public class Main {
    public static void main(String[] args) {
        System.out.println("main BEGIN");
        Host host = new Host();
        //请求数据
        Data data1 = host.request(10, 'A');
        Data data2 = host.request(20, 'B');
        Data data3 = host.request(30, 'C');

        System.out.println("main otherJob BEGIN");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        System.out.println("main otherJob END");

        //不需要直接等待返回,可以同时去执行别的任务
        System.out.println("data1 = " + data1.getContent());
        System.out.println("data2 = " + data2.getContent());
        System.out.println("data3 = " + data3.getContent());
        System.out.println("main END");
    }
}


1.异步方法调用返回值
2.分离 "准备返回值"与"使用返回值"
3.变形--不让人等待的Future参与者
4.变形--会改变的Future参与者
分享到:
评论

相关推荐

    图解java多线程设计模式-结城浩-完整高清带书签版本

    《图解Java多线程设计模式》是由日本著名技术作家结城浩编著的一本深入探讨Java多线程编程的经典著作。这本书以清晰易懂的方式,结合丰富的图表和实例,全面解析了Java多线程开发中的关键概念、设计模式以及实践技巧...

    java多线程设计模式详解(PDF及源码)

    书中包含Java线程的介绍导读、12个重要的线程设计模式和全书总结以及丰富的附录内容。第一章相关线程设计模式的介绍,都举一反三使读者学习更有效。最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的...

    Java多线程设计模式源代码

    Java多线程设计模式是Java编程中至关重要的一个领域,它涉及到如何在并发环境中高效、稳定地执行多个任务。在Java中,多线程可以提高应用程序的响应速度和整体性能,尤其是在处理I/O密集型或计算密集型任务时。本...

    java多线程设计模式源码

    Java多线程设计模式是构建高并发、高性能应用的关键技术之一。这些模式通过优化资源利用、提高程序可读性和可维护性,使并发编程更加高效和安全。以下将详细讲解标题和描述中涉及的一些核心知识点: 1. **线程池...

    java多线程设计模式详解.pdf

    标题“java多线程设计模式详解.pdf”中提到的知识点是关于Java多线程编程中设计模式的应用。Java多线程是并发编程的重要组成部分,设计模式则是软件工程中用于解决特定问题的最佳实践。将两者结合起来,意味着此文件...

    java多线程设计模式

    ### Java多线程设计模式详解 #### 一、Java多线程基础 Java语言自诞生以来,便内置了对多线程的支持。多线程能够让程序在同一时间处理多个任务,提高程序的执行效率和响应速度。Java中创建线程有两种基本方式: 1...

    java多线程设计模式详解

    Java多线程设计模式是Java编程中不可或缺的一部分,它涉及到如何在并发环境下高效、安全地组织代码执行。本文将深入探讨几种常见的Java多线程设计模式,并提供源码实例进行详细解析。 一、生产者消费者模式 生产者...

    Java多线程设计模式

    Java多线程设计模式是程序开发中的重要领域,特别是在服务器端和高性能应用中,多线程的使用可以显著提升系统的并行处理能力。本书由知名技术作者结城浩撰写,于2005年出版,得到了广泛的好评,被誉为“好书”。这...

    java多线程设计模式 (PDF中文版, 附源码)

    目录: 漫谈UML Introduction 1 Java语言的线程 Introduction 2 多线程...总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献

    多线程设计模式.rar

    在计算机科学领域,多线程设计模式是一种优化程序性能、提高资源利用率的重要技术。它允许一个应用程序同时执行多个任务,从而提升系统响应速度和并发能力。尤其在Java这样的多线程支持的语言中,多线程设计模式的...

    Java多线程设计模式.pdf

    从给定的信息来看,文档标题和描述均指出是关于“Java多线程设计模式”的内容,但是提供的部分内容并未涉及实际的技术细节,而是重复了联系方式。因此,本篇将基于标题和描述来展开“Java多线程设计模式”的知识点...

    java 多线程设计模式

    Java多线程设计模式是Java并发编程中的一种高级技巧,它可以帮助开发者在处理并发问题时,提高代码的可读性、可维护性和性能。多线程设计模式是基于Java的并发API,如Thread、Runnable、ExecutorService等,通过特定...

    java多线程设计模式详解+源码

    Java多线程设计模式是Java开发中不可或缺的一部分,它涉及到并发编程的核心理论和技术。在Java中,多线程用于提高程序的执行效率,通过同时执行多个任务来利用系统资源。本资料包包含“java多线程设计模式详解”文档...

Global site tag (gtag.js) - Google Analytics