目录
- 目录
- future 模式
- 实际案例
- 定义
- 测试
- 实现方式
- UML & Code
- UML
- Code
- 系列导航
future 模式
future 模式类似于一张提货单。
future 意思就是未来、期货(金融领域)。
实际案例
类信息概览:
类名 | 说明 |
---|---|
Main.java | 方法的总入口 |
FutureData.java | 未来的数据 |
Data.java | 数据 |
Host.java | 客户端 |
RealData.java | 实际的数据 |
定义
- FutureData.java
package com.github.houbb.thread.learn.easy.learn.future;/*** 2018/2/3** @author houbinbin* @version 1.0* @since 1.7*/
public class FutureData implements Data {
private RealData realData;private boolean isReady = false;public synchronized void setRealData(RealData realData) {if(isReady) {return; //balk}this.realData = realData;this.isReady = true;notifyAll();}@Overridepublic synchronized String getContent() {while (!isReady) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}return this.realData.getContent();}}
- Data.java
package com.github.houbb.thread.learn.easy.learn.future;/*** 2018/2/3** @author houbinbin* @version 1.0* @since 1.7*/
public interface Data {
String getContent();}
- Host.java
package com.github.houbb.thread.learn.easy.learn.future;/*** 2018/2/3** @author houbinbin* @version 1.0* @since 1.7*/
public class Host {
public Data request(final String string) {//System.out.println("Host.request() START...");//1. futurefinal FutureData futureData = new FutureData();//2.new Thread(new Runnable() {@Overridepublic void run() {RealData realData = new RealData(string);futureData.setRealData(realData);}}).start();System.out.println("Host.request() END...");return futureData;}}
- RealData.java
package com.github.houbb.thread.learn.easy.learn.future;import com.github.houbb.thread.learn.easy.learn.ThreadUtil;/*** 2018/2/3** @author houbinbin* @version 1.0* @since 1.7*/
public class RealData implements Data {
private final String string;public RealData(String string) {ThreadUtil.sleep(1000);this.string = string+"-real";}@Overridepublic String getContent() {return this.string;}}
测试
- Main.java
package com.github.houbb.thread.learn.easy.learn.future;/*** 2018/2/3** @author houbinbin* @version 1.0* @since 1.7*/
public class Main {
public static void main(String[] args) {Data futureDataA = new Host().request("A");Data futureDataB = new Host().request("C");Data futureDataC = new Host().request("D");System.out.println(futureDataA.getContent());System.out.println(futureDataB.getContent());System.out.println(futureDataC.getContent());}}
- 测试结果
Host.request() START... Host.request() END... Host.request() START... Host.request() END... Host.request() START... Host.request() END... A-real C-real D-real
实现方式
UML & Code
UML
Code
代码地址
future
系列导航
多线程系列导航