[JAVA]Thread(쓰레드)- 4.thread의 우선순위(priority) Programming Language/Java2018. 5. 16. 15:14
쓰레든느 우선순위(priority)라는 속성(멤버변수)를 가지고 있다.
이 우선순위의 값에 따라 쓰레드가 얻는 실행시간이 달라진다.
쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 서로 다르게 지정하여 특정 쓰레드가 더 많은 작업시간을 갖도록 할 수 있다.
예를들어서 내가 카카오톡을 하는데 파인을 다운로드 처리하는 쓰레드보다 채팅 내용 전송하는 쓰레드 우선순위가 더 높아야
채팅하는게 불편함이 없을거다.
카카오톡 하는데 사진다운 받는동안은 채팅을 못한다던가.. 기다려야한다던가 이러면 엄청 불편할것이다.
이렇게 시각적인 부분이나 사용자에게 빠르게 반응해야하는 작업을 하는 쓰레드의 우선순위는 다른 작업을 수행하는 쓰레드에 비해 높아야 한다.
<쓰레드의 우선순위 지정하기>
쓰레드의 우선순위와 관련된 메서드와 상수는 다음과 같다.
void setPriority (int newPriority) 쓰레드의 우선순위를 지정한 값으로 변경한다.
int getPriority() 쓰레드의 우선순위를 반환한다.
public static final int MAX_PRIORITY = 10 //최대 우선순위
public static final int MIN_PRIORITY = 1 //최소 우선순위
public static final int NORM_PRIORITY = 5 //보통 우선순위
쓰레드가 가질 수 있는 우선순위 범위는 1~10이고 숫자가 높을수록 우선순위가 높다.
알아둬야할건 쓰레드의 우선순위는 쓰레드를 생성한 쓰레드로부터 상속받는다는 것이다.
main메서드를 수행하는 쓰레드를 우선순위가 5이므로 main메서드 내에서 생성하는 쓰레드의 우선순위는 자동적으로 5가 된다.
-->우선순위는 쓰레드를 실행하기 전에만 변경할수 있다!
그치만
(싱글 코어 가정)
두쓰레드의 우선순위가 같은경우시 작업하는것과
t1이 t2보다 우선순위가 높은경우 에 작업하는것을 비교한다면
우선순위가 같은 겨웅네는 각쓰레드에 거의 같은 양의 실행시간이 주어지지만,
우선순위가 다르다면 우선순위가 높은 t1에게 상대적으로 t2보다 많은 양의 실행시간이 주어지고
-->결과적으로 작업 A(t1담당)가 작업 B(t2담당)보다 더 빨리 완료될수 있다.
그러나 멀티코어에서는 쓰레드의 우선순위에 따른 차이가 거의 없었다.
-->쓰레드에 높은 우선순위를 주면 더 많은 실행시간과 실행기회를 갖게될거라고 기대할수는 없다는거..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그래서 굳이 우선순위에 차등을 두어 쓰레드를 실행하려면, 특정 OS의 스케쥴링 정책과 JVM의 구현을 직접확인해 봐야하는데
차라리 쓰레드에 우선순위를 부여하는 대신 작업에 우선순위를 두어서 Priority Queue에 저장해놓고, 우선순위가 높은 작업이 먼저 처리되도록
하는게 나을수도 있다.!
'Programming Language > Java' 카테고리의 다른 글
[JAVA]Thread(쓰레드)- 5.쓰레드 그룹(thread group)과쓰레드의 종류(daemon,non-daemon) (0) | 2018.05.16 |
---|---|
[JAVA]Thread(쓰레드)- 3.싱글쓰레드(single-thread)와 멀티쓰레드(multi-thread) (0) | 2018.05.16 |
[JAVA]Thread(쓰레드)- 2.Thread 구현과 실행 스레드의 생성과정,우선순위,쓰레드 실행주기,싱글-멀티스레드, (0) | 2018.05.15 |
[JAVA]Thread(쓰레드)- 1.Thread란 무엇일까? 정의,멀티쓰레드와 멀티프로세스 (0) | 2018.05.15 |
[JAVA]명품 JAVA Programming 실습문제 13-2 (Thread) (0) | 2018.04.19 |