소켓의 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();
}
}