数据接口
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线程的介绍导读、12个重要的线程设计模式和全书总结以及丰富的附录内容。第一章相关线程设计模式的介绍,都举一反三使读者学习更有效。最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的...
Java多线程设计模式是Java编程中至关重要的一个领域,它涉及到如何在并发环境中高效、稳定地执行多个任务。在Java中,多线程可以提高应用程序的响应速度和整体性能,尤其是在处理I/O密集型或计算密集型任务时。本...
Java多线程设计模式是构建高并发、高性能应用的关键技术之一。这些模式通过优化资源利用、提高程序可读性和可维护性,使并发编程更加高效和安全。以下将详细讲解标题和描述中涉及的一些核心知识点: 1. **线程池...
标题“java多线程设计模式详解.pdf”中提到的知识点是关于Java多线程编程中设计模式的应用。Java多线程是并发编程的重要组成部分,设计模式则是软件工程中用于解决特定问题的最佳实践。将两者结合起来,意味着此文件...
### Java多线程设计模式详解 #### 一、Java多线程基础 Java语言自诞生以来,便内置了对多线程的支持。多线程能够让程序在同一时间处理多个任务,提高程序的执行效率和响应速度。Java中创建线程有两种基本方式: 1...
Java多线程设计模式是Java编程中不可或缺的一部分,它涉及到如何在并发环境下高效、安全地组织代码执行。本文将深入探讨几种常见的Java多线程设计模式,并提供源码实例进行详细解析。 一、生产者消费者模式 生产者...
Java多线程设计模式是程序开发中的重要领域,特别是在服务器端和高性能应用中,多线程的使用可以显著提升系统的并行处理能力。本书由知名技术作者结城浩撰写,于2005年出版,得到了广泛的好评,被誉为“好书”。这...
目录: 漫谈UML Introduction 1 Java语言的线程 Introduction 2 多线程...总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献
在计算机科学领域,多线程设计模式是一种优化程序性能、提高资源利用率的重要技术。它允许一个应用程序同时执行多个任务,从而提升系统响应速度和并发能力。尤其在Java这样的多线程支持的语言中,多线程设计模式的...
从给定的信息来看,文档标题和描述均指出是关于“Java多线程设计模式”的内容,但是提供的部分内容并未涉及实际的技术细节,而是重复了联系方式。因此,本篇将基于标题和描述来展开“Java多线程设计模式”的知识点...
Java多线程设计模式是Java并发编程中的一种高级技巧,它可以帮助开发者在处理并发问题时,提高代码的可读性、可维护性和性能。多线程设计模式是基于Java的并发API,如Thread、Runnable、ExecutorService等,通过特定...
Java多线程设计模式是Java开发中不可或缺的一部分,它涉及到并发编程的核心理论和技术。在Java中,多线程用于提高程序的执行效率,通过同时执行多个任务来利用系统资源。本资料包包含“java多线程设计模式详解”文档...