您的位置:首页 > 编程语言 > Java开发

Java并发程序设计(十)设计模式与并发之Future模式

2017-09-18 15:52 375 查看

设计模式与并发之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 }

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: