2011년 5월 17일 화요일

자바의 스레드를 이용한 프로그램 일시중지 sleep( ) 메소드

자바 쓰레드의 생성부터 소멸에 이르기까지 그와 관련된 중요 메소드를 표시한 도표이다. 여러분이 저번 시간에 공부한 것도 보일 것이다. start( ) 메소드와 run( ) 메소드인데 어라(?) run( )메소드가 Running 화살표에 있어야 되는데 안보이는구먼. 있다고 생각해라.ㅎㅎ 암튼 자바의 쓰레드에 관련된 메소드가 많이 있긴 하지만 대충이라도 위에 적힌 메소드의 쓰임에 대해서는 여러분이 인지하고 있어야 될것이다. 보다 자세한 사항은 자바 API에 있는 java.lang 패키지의 Thread 클래스를 살펴보면 찾아볼수 있을 것이다. 어렵게 생각하지 말고 자바 라이브러리 보기전에 도표를 보면서 일단 관련 메소드의 기능을 상상해 보라. 이번에도 마찬가지지만 영어의 뜻만 제대로 알아도 반은 먹고 들어간다. 영어공부 열심히 하자.ㅎㅎ 오늘은 그 중에서 가장 간단하고도 재미(?)있는 sleep( )메소드에 대해 알아보기로 하겠다.

도표에서 sleep( ) 메소드가 있는 곳을 보면 뭔가 작동하다가 블록킹(?)했다고 보인다. 즉 뭔가 하다가 일시중지하는 그런 명령어다. sleep( )는 1/1000초(millisecond)로 세팅이 되어있는데 인자에 값을 넣어주면 넣은 값만큼 시간을 지연시킨후에 다음 명령을 실행시킨다. 즉 1초를 지연시키고 싶으면 1000을 넣어주면 될것이고 10초를 지연시키고 싶으면 10000을 넣어주면 될것이다. 곱셈 못하는 이는 없겠지?^^ 그럼 간단한 예제를 보면서 음미해 보기로 하자.


하나

두울
세엣
네엣
다섯

보다시피 프로그램은 아주 간단하다. 배열 하나 만들어놓고 그걸 반복문을 통해 출력하는 예제이나 쓰레드를 이용한 시간차 공격(?)을 한다는게 다를 뿐이다. 여러분이 실행을 해보면 실행속도를 이렇게도 조절할수 있구나라고 감탄을 금치 못할 것이다. 아님 말구 --; 배열이야 배웠으니 패스하고 역시 Thread.sleep(3000); 이 명령문이 신기할 것이다. 앞서 설명하였으니 3000이 3초(3000*1/1000)라는건 알테고 어떻게 Thread안에 있는 sleep 메소드를 객체생성도 없이 불러내서 쓸수 있느냐라는 의문이 들지 않는가? 무작정 그냥 쓰면 되는걸까? ^^ 우리는 이미 예전에 객체생성없이 클래스안의 메소드를 바로 불러서 쓸수 있게 만드는 방법을 배웠었다. 기억이 나지 않는다면 static 관련 강좌를 다시 보기 바란다. 바로 sleep( ) 메소드가 static으로 되어있기 때문에 이렇게 편하게 쓸수 있는 것이다. 앞으로는 이렇게 일일이 설명하지 않을테니 그냥 썼으면 아하 뭔가(?) 있구나 알아서 캐치하기 바란다.^^

신기한 점이 하나 더 있을텐데 보이지 않나? 찾은 사람 손~ 손~~ㅎㅎ 메인메소드 옆에 있는 throws InterruptedException 인데 sleep( ) 메소드 이용시 예외처리를 해야 제대로 작동된다는 소문(?)이 있다. 물론 여러분이 배운 try catch로도 만들수 있을 것이다. 귀찮더라도 직접 throws 관련구문 빼고 try catch 구문으로 바꿔서 실행해 보기 바란다. 오늘은 자바의 쓰레드 워밍업 두번째 시간으로 가볍게 진행했는데 맨위에 있는 쓰레드 도표라도 틈나는데로 자주 쳐다보기 보란다. 너무 느리다고 혹시 불평하고 있는이가 있을지 모르겠지만 자바의 쓰레드에서 떨어져 나가는 이가 상당히 많다. 필자가 이를 방지하고자 최대한 보폭을 조절하고 있음이니 방심하지 말고 긴장하면서 복습 철저히 하기 바란다.^^

댓글 3개: