zoukankan      html  css  js  c++  java
  • Java并发程序设计(十)设计模式与并发之Future模式

    设计模式与并发之Future模式

    核心思想:异步调用。

     

    1 /**
    2  * @author: Tang Jiujia
    3  * @version: 2017/9/18 0018 15:22
    4  */
    5 public interface Data {
    6 
    7     String getResult();
    8 }
     1 /**
     2  * @author: Tang Jiujia
     3  * @version: 2017/9/18 0018 15:23
     4  */
     5 public class RealData implements Data{
     6 
     7     protected final String result;
     8 
     9     public RealData(String para){
    10         StringBuffer bf=new StringBuffer();
    11         for (int i=0;i<10;i++){
    12             bf.append(para);
    13             try{
    14                    Thread.sleep(100);
    15                 }catch (Exception e){
    16                     e.printStackTrace();
    17                 }
    18         }
    19         result=bf.toString();
    20     }
    21 
    22     @Override
    23     public String getResult() {
    24         return result;
    25     }
    26 }
     1 public class FutureData implements Data{
     2 
     3     protected RealData realData=null;
     4     protected boolean isReady=false;
     5 
     6     public synchronized void setRealData(RealData realData){
     7         if(isReady){
     8            return;
     9         }
    10 
    11         this.realData=realData;
    12         isReady=true;
    13         notifyAll();
    14     }
    15 
    16     @Override
    17     public synchronized String getResult() {
    18         while (!isReady){
    19             try{
    20                  wait();
    21                 }catch (Exception e){
    22                     e.printStackTrace();
    23                 }
    24         }
    25         return realData.result;
    26     }
    27 }
     1 public class Client {
     2 
     3     public Data request(final String queryStr){
     4         final FutureData futureData=new FutureData();
     5         new Thread(){
     6             @Override
     7             public void run(){
     8                 RealData realData=new RealData(queryStr);
     9                 futureData.setRealData(realData);
    10             }
    11         }.start();
    12 
    13         return futureData; //立即返回了futureData
    14     }
    15 }
     1 public class MainClass {
     2 
     3     public static void main(String[] args){
     4         Client client=new Client();
     5         Data data=client.request("name");
     6         System.out.println("请求完毕");
     7         try{
     8              Thread.sleep(2000);
     9             }catch (Exception e){
    10                 e.printStackTrace();
    11             }
    12             System.out.println("数据="+data.getResult());
    13     }
    14 }
    Simple is important!
  • 相关阅读:
    茗洋ASP.NET MVC4 IN ACTION 教程目录
    C#实验室<群内活动>2013年5月12日的算法题目记录[胜者:Yamat]
    那天有个小孩跟我说LINQ(四)
    C#实验室同盟测试iframe
    C#实验室同盟测试页
    那天有个小孩跟我说LINQ(五)
    C#实验室<常用软件>Windows Live Writer
    ASP.NET MVC4 IN ACTION学习笔记第六波[Ajax in ASP.NET MVC][1/3]
    那天有个小孩跟我说LINQ(六)
    ASP.NET MVC4 IN ACTION学习笔记第四波
  • 原文地址:https://www.cnblogs.com/Shadowplay/p/7543479.html
Copyright © 2011-2022 走看看