소켓의 accept 을 응용한 형태로 구현해 봤습니다.

이 형태가 맞는지 ? 원본 소스를 보지 않았는데 나중에 시간되면 한번 봐봐야지요 -_-;


아래 부분을 좀 수정 해야 될거 같은데 흠..

Thread.sleep(Long.MAX_VALUE);


결과 : 


Thread가 2개가 유지 됨 / 1,2 => 2,3 => 3,4 이런 형태로 유지


start

create : 274064735

create : 841752171

close : 274064735

create : 592705150

close : 841752171

create : 244621161

close : 592705150

package kr.co.jwsnt.libs.test;


public class TeNotifyRecur{
	
	/*
	 * 결과
	 * 
	 */

	public static void main(String[] args){
		new TeNotifyRecur();
	}
	
	class TeThread extends Thread{
		
		private TeNotifyRecur p;
		
		public TeThread(TeNotifyRecur p){
			this.p = p;
		}
		
		@Override
		public void run() {
			try {
				Thread.sleep(2000);
				p.reconnect();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	TeNotifyRecur(){

		System.out.println("start");
		
		connect();
		
		while(true){
			try {
				Thread.sleep(Long.MAX_VALUE);
			} catch (InterruptedException e) {
				break;
			}
		}
		System.out.println("end");
		
	}
	
	private void connect()
	{
		Object obj = new Object();
		System.out.println( "create : " + obj.hashCode() );

		try{
			Thread t = new TeThread(this);
			t.setDaemon(true);
			t.start();
			startWait();
		}catch(Exception e){
			System.out.println( "conn : " + e.toString() );
		}finally{
			close(obj);	
		}
	}
	
	private void close(Object obj){
		System.out.println( "close : " + obj.hashCode() );
		obj = null;
	}
	
	public synchronized void reconnect(){
		notify();
		connect();
	}
	
	public synchronized void startWait() throws InterruptedException{
		wait();
	}
}


+ Recent posts