티스토리 뷰
새로 생성된 스레드의 세 가지 상태
1 | Thread t = new Thread(r); |
1 | t.start() |
1 | 실행 대상으로 선정되었을 때 |
스레드 스케줄러
누가 실행중인 상태에서 실행 가능한 상태로 움직여야 할지, 언제 스레드가 실행중인 상태를 떠나야 하는지 등의 결정은 모두 스레드 스케줄러가 내립니다. 스케줄러는 어떤 스레드가 실행되어야 하는지 얼마나 오랫 동안 실행되어야 하는지, 그리고 스케줄러에서 그 스레드를 현재 실행중인 상태에서 쫓아냈을 때 그 스레드가 어디로 가야 하는지도 결정합니다.
그러나 스케줄러를 사용자 마음대로 제어할 수는 없습니다. API애는 스케줄러에 대해 호출할 수 있는 메소드가 하나도 없기 때문입니다. 즉, 스케줄링과 관련하여 어떤 것도 확언할 수 없다는 것입니다.
그래서 반드시 지켜야 할 한 가지 규칙은 "스케줄러가 어떤 특별한 방식으로 작동할 것을 가정하고 프로그램을 만들면 안된다." 라는 규칙입니다. 프로그램을 한 대에서만 테스팅 해보고서는 그 프로그램을 어디에서 실행시키든지 스레드 스케줄러가 항상 그런 식으로 작동할 것이라고 생각하는 것은 오산입니다.
그렇다면 여러 곳에서 테스트 해봤을 때 동일한 결과를 출력하는 멀티 스레딩 프로그램을 만들려면 어떻게 해야 할까요?
스레드 스케줄러에 가장 큰 영향을 미치는 것 가운데 하나는 바로 대기 상태 입니다. 어떤 스레드를 대기 상태에 집어넣으면, 그 시간이 몇 밀리초 밖에 안더라도 그 실행중인 상태의 스레드가 실행중인 상태에서 벗어나고 다른 스레드에 실행 기회를 주게 됩니다.
스레드의 sleep() 메소드에서는 한 가지 보장해주는 것이 있습니다. 대기중인 스레드는 대기 시간이 종료되기 전까지는 절대 현재 실행중인 스레드가 되지 않는다는 것 입니다. 예를 들어, 어떤 스레드를 2초 동안 대기시켰다면 그 스레드는 그 2차가 지나가기 전에는 절대 실행중인 상태의 스레드가 되지 않습니다.
스케줄러의 불확실성
이전에 ThreadTester 클래스를 실행 시켰을 때 다음과 같은 결과가 나왔습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ java ThreadTester back in main top of the stack $ java ThreadTester back in main top of the stack $ java ThreadTester top of the stack back in main $ java ThreadTester back in main top of the stack $ java ThreadTester top of the stack back in main |
위의 결과를 보게 되면 순서가 아무렇게나 바뀐다는 것을 알 수 있습니다. 새로운 스레드가 먼저 끝나기도 하고 메인 스레드가 먼저 끝나는 경우도 있습니다.
출처 : headfirst JAVA
'프로그래밍 > JAVA' 카테고리의 다른 글
JAVA mp3 파일 정보 알아내기 (2) | 2016.11.24 |
---|---|
JAVA sleep 에 대해 (0) | 2016.11.16 |
JAVA Thread 사용법 (0) | 2016.11.16 |
JAVA Thread에 대해 (0) | 2016.11.15 |
JAVA 엑셀 파일 불러오기 (1) | 2016.11.05 |
- Total
- Today
- Yesterday
- JavaFX
- 스프링부트
- java
- JavaFX Table View
- 자전거
- 자전거 여행
- effective java
- intelij
- git
- 일본 배낭여행
- 방통대 과제물
- 이펙티브
- JavaFX Window Close
- 일본 여행
- 이펙티브 자바
- 배낭 여행
- 텐트
- windows
- JavaFX 종료
- 일본여행
- JavaFX 테이블뷰
- Java UI
- springboot
- 이펙티브자바
- 인텔리제이
- effectivejava
- 배낭여행
- TableView
- 일본 자전거 여행
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |