티스토리 뷰
sleep()
스레드들이 공평하게 순번을 할당받게 하는 가장 좋은 방법 가운데 하나는 주기적으로 대기 상태에 집어넣어주는 것입니다. 대기 상태에
넣어주고 싶다면 정적 메소드인 sleep() 메소드를 호출하면 됩니다. 이 때 대기 시간을 밀리초 (1 / 1000) 초 단위로 지정하기 위한 숫자를
인자로 전달해야 합니다. 아래와 같이 말이죠.
1 | Thread.sleep(2000); |
이렇게 하면 스레드가 메소드에서 InterruptedException 이라는 확인 예외를 던질 수 있기 때문에 sleep을 호출할 때는 항상 try/catch 블록 안에서 호출해야 합니다. 따라서 아래와 같이 쓸수 있습니다.
1 2 3 4 5 6 7 8 9 | try{ Thread.sleep(2000); } catch (InterruptedException ex){ ex.printStackTrace(); } |
이렇게 하고 나면 지정된 시간이 지나가기 전에는 스레드가 다시 실행되지 않는다는 것을 알 수 있지만 '타이머'가 끝나고 나서도 얼마 정도 시간이 지난 다음에 깨어날 가능성은 어떨까요? 그럴 수도 있고 그렇지 않을 수도 있습니다. 사실 그렇게 중요하진 않습니다. 스레드가 대기 상태에서 깨어나더라도 언제나 실행 가능한 상태로 되돌아게게 되니까요.
스레드가 지정된 시간이 지나면 자동으로 잠에서 깨어나서 현재 실행중인 상태가 되는 것은 아닙니다. 스레드의 대기 상태가 풀리면 그 스레드의 운명은 다시 스레드 스케줄러의 손에 맡겨지게 됩니다.
그래서 이전에 봤던 ThreadTester 클래스에서 main 스레드의 "back in the main" 이 "top of the stack 보다 먼저 실행 되도록 하려고 할 때 어떻게 sleep 을 사용하면 될까요? 다음과 같이 진행하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class testRunnable /*implements Runnable*/{ public void run(){ go(); } public void go(){ try{ Thread.sleep(2000); }catch(InterruptedException ex){ ex.printStackTrace(); } do(); } public void doExcute(){ System.out.println("top of the stack"); } } public class ThreadTester{ public static void main(String[] args){ Runnable threadJob = new testRunnable(); // 이렇게 하면 스레드에 새로운 스택 맨 아래에 집어넣을 메소드를 알려줄 수 있습니다. Thread myThread = new Thread(threadJob); myThread.start(); System.out.println("back in main"); } } | cs |
출처 : headfirst JAVA
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] Java 요일(월요일 부터 일요일 까지) 생성해서 String 배열에 넣는 방법 (0) | 2016.12.17 |
---|---|
JAVA mp3 파일 정보 알아내기 (2) | 2016.11.24 |
JAVA Thread의 상태와 스케줄러 (0) | 2016.11.16 |
JAVA Thread 사용법 (0) | 2016.11.16 |
JAVA Thread에 대해 (0) | 2016.11.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- JavaFX
- 자바
- 인텔리제이
- git
- effective java
- 배낭 여행
- JavaFX 종료
- java
- 텐트
- 일본여행
- 이펙티브자바
- JavaFX Table View
- 방통대 과제물
- 자전거
- JavaFX 테이블뷰
- springboot
- TableView
- 배낭여행
- 스프링부트
- windows
- JavaFX Window Close
- 이펙티브 자바
- effectivejava
- intelij
- 일본 배낭여행
- Java UI
- 이펙티브
- 자전거 여행
- 일본 자전거 여행
- 일본 여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함