스레드를 활용한 wait 처리를 구현하기 위해 테스트한 결과를 기록해 두었음.


평소에 thread를 잘 활용하지 않으니 이런 문제가 발생한거 같은데 좀더 많은 탐구가 필요한 것으로 사료 됨.

응용하면 consumer, producer형태에 사용할 수 있음. 이번에 mq관련 프로젝트에서 아래 내용을 활용해서 적용.


socket listen => client socket 개별 생성 => map에 메시지 넣고 wait

mq consumer thread로 동작 메시지 수신 시 map에서 꺼내 notify => client socket은 응답 메시지 작업 후 close


그냥 주저리 내용이므로 참조만 바랍니다. 볼 사람이나 있을려나 훗~


결과 :


job-1

job-2

waitStart-1

run-1

run-2

waitEnd-1

waitEnd-2

run-3

waitStart-2

job-3


public class TeParent {

	class TeChild implements Runnable{
		TeParent p;
		TeChild(TeParent p){
			this.p = p;
		}
		
		@Override
		public void run() {
			try {
				System.out.println("run-1");
				Thread.sleep(3000);
				System.out.println("run-2");
				this.p.waitEnd();
				System.out.println("run-3");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	public synchronized void waitStart() throws InterruptedException{
		System.out.println("waitStart-1");
		wait();
		System.out.println("waitStart-2");
	}
	
	public synchronized void waitEnd(){
		System.out.println("waitEnd-1");
		notify();
		System.out.println("waitEnd-2");
	}
	
	TeParent(){
		try{
			System.out.println("job-1");
			new Thread(new TeChild(this)).start();;
			System.out.println("job-2");
			waitStart();
			System.out.println("job-3");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args){
		new TeParent();
	}
}


+ Recent posts