多线程程序设计学习(10)Future pattern

简介: Future pattern[订单取货模式]一:Future pattern的参与者--->Client(客户需求)--->Host(蛋糕门店)--->Data(票据和蛋糕的接口)--->Future(蛋糕票据)--->ReaData(制作蛋糕过程)       二:Future pattern模式...

Future pattern[订单取货模式]

一:Future pattern的参与者
--->Client(客户需求)
--->Host(蛋糕门店)
--->Data(票据和蛋糕的接口)
--->Future(蛋糕票据)
--->ReaData(制作蛋糕过程)
       

二:Future pattern模式什么时候使用
--->


三:Future pattern思考
       --->

四进阶说明        
--->

数据类接口

 1 package com.yeepay.sxf.thread9;
 2 /**
 3  * 数据接口,用于定义获取【蛋糕】成功的方法
 4  * @author sxf
 5  *
 6  */
 7 public interface Data {
 8     
 9     /**
10      * 获取蛋糕的方法
11      * @return
12      */
13     public abstract String getContent();
14 }
View Code

蛋糕类

 1 package com.yeepay.sxf.thread9;
 2 /**
 3  * 制造蛋糕的真正工作
 4  * @author sxf
 5  *
 6  */
 7 public class RealData implements Data {
 8     //真正的蛋糕
 9     private String content;
10     
11     //制造蛋糕的过程
12     public RealData(String data,Integer count){
13         System.out.println("制造蛋糕的工作开始");
14         StringBuffer buffer=new StringBuffer();
15         for(int i=0;i<count;i++){
16             buffer.append(data+count);
17             try {
18                 Thread.sleep(1000);
19             } catch (InterruptedException e) {
20                 // TODO Auto-generated catch block
21                 e.printStackTrace();
22             }
23         }
24         content=new String(buffer);
25         System.out.println("制造蛋糕的工作结束");
26         
27     }
28 
29     /**
30      * 返回制造好的蛋糕
31      */
32     @Override
33     public String getContent() {
34         // TODO Auto-generated method stub
35         return content;
36     }
37     
38     
39 }
View Code

取蛋糕的票据

 1 package com.yeepay.sxf.thread9;
 2 /**
 3  * 取蛋糕的票据
 4  * @author sxf
 5  *
 6  */
 7 public class FutureData implements Data {
 8     //真正的蛋糕
 9     private RealData data;
10     //蛋糕是否制造好的证据
11     private boolean flag=false;
12     
13     public synchronized void setRealData(RealData realData){
14         if(flag){
15             return;
16         }
17         this.data=realData;
18         this.flag=true;
19         //蛋糕制作成功,则唤醒取蛋糕的线程
20         notify();
21     }
22     
23     
24     
25     //通过票据获取蛋糕
26     @Override
27     public synchronized String  getContent() {
28         // TODO Auto-generated method stub
29         //如果蛋糕没有制作成,去蛋糕的线程休息
30         while(!flag){
31             try {
32                 wait();
33             } catch (InterruptedException e) {
34                 // TODO Auto-generated catch block
35                 e.printStackTrace();
36             }
37         }
38         return data.getContent();
39     }
40 
41     
42     
43 }
View Code

开启制作蛋糕线程的类

 1 package com.yeepay.sxf.thread9;
 2 /**
 3  * 启动新线程去制作蛋糕
 4  * @author sxf
 5  *
 6  */
 7 public class Host {
 8     
 9     /**
10      * 请求按什么标准制作蛋糕
11      * @param count
12      * @param c
13      * @return
14      */
15     public Data request(final int count,final String c){
16         System.out.println("请求按"+c+"加"+count+"的条件制作蛋糕");
17         //建立这个蛋糕的票据
18          final     FutureData futureData=new FutureData();
19         //制作蛋糕需要花费时间,启动新的线程,去制作蛋糕
20         new Thread(){
21 
22             @Override
23             public void run() {
24                 //制作蛋糕的线程体
25                 RealData realData=new RealData(c, count);
26                 //将制作好的蛋糕塞入票据中
27                 futureData.setRealData(realData);
28             }
29             
30         }.start();
31         
32         System.out.println("蛋糕是否已经收到要求,给我一张取蛋糕的票据");
33         
34         return futureData;
35         
36     }
37 }
View Code

模拟主线程,先做蛋糕,去忙别的事,忙完取蛋糕的类

 1 package com.yeepay.sxf.thread9;
 2 /**
 3  * 模拟客户端
 4  * @author sxf
 5  *
 6  */
 7 public class Test {
 8     
 9     public static void main(String[] args) {
10         Host host1=new Host();
11         Host host2=new Host();
12         //发送请求获取蛋糕票据
13         Data data=host1.request(2, "sxf");
14         Data data2=host2.request(3, "***");
15         //我可以去忙其他的事情
16         System.out.println("host1 Test.main(买菜做饭,到下午去取蛋糕)");
17         
18         //取蛋糕
19         String cake=data.getContent();
20         String cake2=data2.getContent();
21         //吃蛋糕
22         System.out.println("Test.main(Host1)eate"+cake);
23         System.out.println("Test.main(Host2).eata"+cake2);
24     }
25 
26 }
View Code

 

相关文章
|
1月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
1月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
1月前
|
C#
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
|
1月前
|
C#
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
|
1月前
|
Java C#
C#学习系列相关之多线程(五)----线程池ThreadPool用法
C#学习系列相关之多线程(五)----线程池ThreadPool用法
|
3月前
|
存储 Java 调度
从零开始学习 Java:简单易懂的入门指南之线程池(三十六)
从零开始学习 Java:简单易懂的入门指南之线程池(三十六)
|
3月前
|
Java 调度
从零开始学习 Java:简单易懂的入门指南之多线程(三十四)
从零开始学习 Java:简单易懂的入门指南之多线程(三十四)
|
3月前
|
数据处理
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
43 1
|
3月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
62 0
|
1月前
|
C#
C#学习系列相关之多线程(二)----Thread类介绍
C#学习系列相关之多线程(二)----Thread类介绍

热门文章

最新文章