다중 스레드 모드의 Future Pattern

2223 단어 Pattern
Future 모드는 jdk5에서 구현됨
그 특징은 함수의 집행 결과를 막지 않고 즉각적으로Future 대상을 되돌려준다는 것이다. Future 대상은 마치 선하증권과 같아서 함수 집행이 끝나면 선하한다.
핵심 클래스는 Host 및 Future Data
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		Host host = new Host();
		Data f1 = host.request(5, 'c');
		Data f2 = host.request(5, 'd');
		Data f3 = host.request(5, 'e');
		
		Thread.sleep(2000);
		System.out.println(f1.getData());
		

	}

}

package com.justel.fs.future;

public class FutureData implements Data{
	private boolean ready = false;  //readData      
	private RealData realData;

	@Override
	public synchronized String getData() {
		while(!ready){
			try {
				wait();
			} catch (InterruptedException e) {
			}
		}
		return realData.getData();
	}

	public RealData getRealData() {
		return realData;
	}

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


}
package com.justel.fs.future;

public class RealData implements Data{
	private int n;
	private char c;
	
	public RealData(int n, char c){
		this.n = n;
		this.c = c;
	}


	@Override
	public String getData() {
		String string = "";
		try {
			for (int i = 0; i < n; i++) {
				string += c;
				Thread.sleep(1000);
			}
		} catch (InterruptedException e) {
		}
		
		return string;
	}

}
package com.justel.fs.future;

public class Host {

	public Data request(final int n, final char c){
		final FutureData futureData = new FutureData();
		
		new Thread(){
			public void run(){
				RealData realData = new RealData(n, c);
				futureData.setRealData(realData);
			}
		}.start();
		
		return futureData;
	}
	
}

좋은 웹페이지 즐겨찾기