期货 future

来源:互联网 发布:手机改机型软件 编辑:程序博客网 时间:2024/06/10 08:44

package _future;

public class Host {

   

    public Data Request(final int count, final char c)

    {

        System.out.println("    request(" + count + ", " + c + ") BEGIN");

        

        final FutureData future = new FutureData();

        

        new Thread()

        {

            public void run()

            {

               RealData realData = new RealData(count, c);

               future.setRealData(realData);

            }

        }.start();

        System.out.println("    request(" + count + ", " + c + ") END");

        return future;

    }

}

 

 

package _future;

public class FutureData implements Data {

 

    private RealData realData = null;

   

    private boolean ready = false;

   

   

    public  synchronized void setRealData(RealData realData)

    {

       if(ready)

           return ;

      

       this.realData = realData;

       this.ready = true;

       notify();

    }

   

   

    @Override

    public synchronized String getContent() {

       while(!ready)

       {

           try {

              wait();

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

       }

      

       return realData.getContent();

    }

}

 

package _future;

public class RealData implements Data {

 

    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) {

           }

       }

      

       System.out.println("        making RealData(" + count + ", " + c + ") END");

       this.content = new String(buffer);

    }

   

   

    @Override

    public String getContent() {

       return content;

    }

}

 

原创粉丝点击