当前位置: 代码迷 >> 综合 >> 轻松学习多线程-10-Future 模式
  详细解决方案

轻松学习多线程-10-Future 模式

热度:75   发布时间:2024-01-06 11:21:07.0

目录

  • 目录
  • 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

Future

Code

代码地址

future

系列导航

多线程系列导航

  相关解决方案