근데 제 생각에는 3개의 쓰레드를 생성한 최초의 쓰레드(편의상 부모 쓰레드라고 부르겠습니다. 물론 쓰레드에서 부모 라는게 이상하긴 하지만요...)는 쓰레드를 생성한 후에 join 을 할려고 하지 않는데요. 그냥 죽지 않고 계속 살아있는데...원래 그런건가요?
쓰레드에도 엄연히 parent 가 존재합니다. Thread 는 생성되었을때, 부모와 같은 memory space 를 사용합니다.
Java 에서는 Thread 라는 class 에 setDaemon() 이라는 함수를 만들어서, 부모와의 execution control 을
간편하게 분리할수 있도록 해줍니다. Child Thread 가 데몬이 아닌상태라면, 부모가 종료하였더라도,
child 가 끝날때 까지는 부모의 콘트롤도 terminate 가 될수 없습니다.
Child Thread 가 데몬이 된다면, 제추측으로는, 부모가 끝이 나면, 프로세스는 종료가 되더라도,
child 가 종료될때까지는 프로세스 리스트에 남아있지 않을까... 싶습니다.
테스트 코드를 올립니다.
import java.io.*;
public class DaemonTest{
class Child extends Thread {
public void run() {
for (int i=0; i<25; i++) {
try { Thread.sleep(500);
}catch(Exception e) {}
System.out.println(i);
}
}
}
private Child c = null;
public DaemonTest() {
c = new Child();
// c.setDaemon(true); // 이 라인을 uncomment 하면, 위의 print 를 화일로 보내셔야 할듯...
}
public void go() {
c.start();
}
static public void main(String[] args) {
new DaemonTest().go();
}
}
Re: 자바에서 쓰레드를 생성한 후에 조인을 안 해도 부모 쓰레드
질문이 정확히 이해는 안되지만 이런건지 궁금하네요.
쓰레드에도 엄연히 parent 가 존재합니다. Thread 는 생성되었을때, 부모와 같은 memory space 를 사용합니다.
Java 에서는 Thread 라는 class 에 setDaemon() 이라는 함수를 만들어서, 부모와의 execution control 을
간편하게 분리할수 있도록 해줍니다. Child Thread 가 데몬이 아닌상태라면, 부모가 종료하였더라도,
child 가 끝날때 까지는 부모의 콘트롤도 terminate 가 될수 없습니다.
Child Thread 가 데몬이 된다면, 제추측으로는, 부모가 끝이 나면, 프로세스는 종료가 되더라도,
child 가 종료될때까지는 프로세스 리스트에 남아있지 않을까... 싶습니다.
테스트 코드를 올립니다.
삽질의 대마왕...
댓글 달기