2011년 5월 18일 수요일

자바의 스레드가 끝날때까지 기다려주는 join( ) 메소드

자바의 쓰레드는 게임과 네트워크 프로그래밍에서 중추적인 역활을 담당하는 파트 중 하나이다. 지겹게 느낄지 모르겠지만 피가 되고 살이 될것이라 믿고 하나하나 습득해 가기 바란다. 오늘은 생판 새로운 메소드를 들고 왔다. 바로 쓰레드가 끝날때까지 친절히 기다려주는 join( ) 메소드다. 이것도 역시 sleep( ) 메소드처럼 예외처리를 해줘야한다. 도표 열심히 봤는데 없는거 들고 나왔다고 째려보는 이는 없겠징? *_*; 일단 예제를 보자.


주석을 상세히 달아놔서 그냥 봐도 이해가 될것이다.^^ 너무 성의없다고 할까봐 조금더 설명을 곁들여 보겠다.* isAlive( ) 메소드는 말그대로 프로그램에서 쓰레드가 살아서 움직이고 있는지 테스트하는 메소드이다. 쓰레드가 작동하고 있는 중이라면 true를 아니라면 false 값을 반환한다. join( ) 메소드는 이런 쓰레드가 작동할 경우 끝날때까지 기다려주고 다음 명령문을 실행한다. 쓰레드만 start( ) 메소드로 작동시키고 join( ) 메소드가 없으면 결과가 제대로 출력되지 않는다. at쓰레드가 미처 계산하기도 전에 메인메소드(main쓰레드)가 다음 명령문을 실행해 버린다. 뭔가 분리되어 움직이는 것 같다. 프로그램은 우리가 지시한 명령 즉 작업 스케줄데로 움직일 뿐이지만 쓰레드를 이용하면 이렇게 동시다발적으로 일어나는듯한 현상(?)이 발생한다. main쓰레드 따로 우리가 만든 at쓰레드 따로 움직이는데 이를 우리가 join( ) 메소드로 제어한다고 생각하면 이해가 쉬울 것이다.

join( ) 메소드는 아래와 같이 세가지 타입이 있다.

void join( ) //쓰레드가 끝날때까지(죽을때까지) 기다린다
void join(long millis) //쓰레드를 1/1000초만큼 기다린다
void join(long millis, int nanos)
// 쓰레드를 (1/1000)+(1/100000000)초만큼 기다린다

지금은 프로그램이 짧으니까 쓸일이 없겠지만 방대한 프로그램일 경우 기다리는 시간까지 제어가 가능하다. 뭔가 하라고 지시를 했는데 시간내에 지시사항을 완료하지 못할경우 다음사항을 진행하게 만드는 기능으로 써먹을수 있을 것이다. 이런 기능이 없다면 평생 기다리는 일이 생길지도 모르니까 말이다.ㅎㅎ

false
true
5050
false

결과를 보면 알겠지만 해당 쓰레드가 작동하는지 안하는지 볼수 있게 소스를 만들었다. 당연한거지만 join( ) 메소드를 실행하고 난후에 isAlive( ) 메소드로 테스트한다면 어떤 값이 나올까? 당연히 false가 나올 것이다. 쓰레드가 끝날때까지 기다리는 명령어가 join( )이니까 말이다. 모두 다 맞췄으리라 기대하면서 오늘은 이만 하겠다.^^

댓글 3개:

  1. 감사합니다 이해 쏙쏙^^

    답글삭제
  2. Hi, Neat post. There is an issue along with your
    web site in web explorer, could check this? IE still
    is the marketplace leader and a large component to other people will miss your great writing because of this problem.


    Look into my site ... cellulite treatment

    답글삭제