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");
}
}
轉載于:https://www.cnblogs.com/xinzhuangzi/archive/2010/08/18/4100552.html
總結
以上是生活随笔為你收集整理的java future设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDOJ 1213 HDU 1213 H
- 下一篇: 测试工具备查