zoukankan      html  css  js  c++  java
  • java future设计模式

    1、数据接口层:

    package multithread;

    public interface Data2 {

    public abstract String getContent();
    }

    2、真实数据层:

    package multithread;

    public class RealData implements Data2{

    private final String content;

    public RealData(int count,char c){
       System.out.println(" making realdata("+count+","+c+") begin");
       char buffer[] = new char[count];
       for(int i=0;i<count;i++){
        buffer[i] = c;
        try {
         Thread.sleep(100);
        } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }
       }
      
       System.out.println(" making realdata("+count+","+c+") end");
       this.content = new String(buffer);
    }
    public String getContent(){
       return content;
    }
    }

    3、虚拟数据层(提货单):

    package multithread;

    /**
    * @author Administrator
    *提货单
    */
    public class FutureData implements Data2{

    private RealData realdata = null;
    private boolean ready = false;

    public synchronized String getContent(){
       while(!ready){
        try {
         wait();
        } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }
       }
      
       return realdata.getContent();
    }

    public synchronized void setRealData(RealData realdata){
       if(ready)
        return ;
       this.realdata = realdata;
       this.ready = true;
       notifyAll();
    }
    }

    4、处理数据层:

    package multithread;

    public class Host2 {

    public Data2 request(final int count,final char c){
       System.out.println(Thread.currentThread().getName()+" ....");
       System.out.println(" request("+count+", "+c+") begin");
       final FutureData future = new FutureData();
       //System.out.println(future.toString());
       new Thread(){
        public void run(){
         RealData realdata = new RealData(count ,c);
         future.setRealData(realdata);
        }
       }.start();
      
       System.out.println(" request("+count+", "+c+") end");
       return future;
    }
    }

    5、测试类:

    package multithread;

    public class Main5 {

    public static void main(String args[]){
       System.out.println("main begin");
       Host2 host = new Host2();
       Data2 data1 = host.request(10, 'A');
       Data2 data2 = host.request(20, 'B');
       Data2 data3 = host.request(30, 'C');
      
       System.out.println("main otherjob begin");
      
       try {
        Thread.sleep(2000);
       } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       System.out.println("main otherjob end");
      
       System.out.println("data1="+data1.getContent());
       System.out.println("data2="+data2.getContent());
       System.out.println("data3="+data3.getContent());
      
       System.out.println("main end");
    }
    }

  • 相关阅读:
    Android开源图表图形库K线图
    交易所8种作死方式
    Android百大框架排行榜
    15类Android通用流行框架
    如何避免Scrum敏捷开发团队反思会形式化,海星法介绍
    2018年Android面试题含答案--适合中高级
    FCoin优势
    golang学习笔记16 beego orm 数据库操作
    金融系统中加密机的简介
    ESB(Enterprise Service Bus)企业服务总线介绍
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100552.html
Copyright © 2011-2022 走看看