메뉴 건너뛰기

2016.09.13 18:47

쓰레드의 우선순위

조회 수 3503 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

쓰레드의 우선순위


쓰레드는 우선순위라는 속성(멤버변수)을 가지고 있는데, 이 우선순위의 값에 따라 쓰레드가 얻는 실행시간이 달라진다. 쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 서로 다르게 지정하여 특정 쓰레드가 더 많은 작업시간을 갖도록 할 수 있다.


예를 들어 파일 전송기능이 있는 메신저의 경우, 파일다운로드를 처리하는 쓰레드보다 채팅 내용을 전송하는 쓰레드의 우선순위가 더 높아야 사용자가 채팅을 하는데 불편함이 없을 것이다. 대신 파일다운로드 작업에 걸리는 시간은 더 길어질 것이다.

이처럼 시각적인 부분이나. 사용자에게 빠르게 반응해야하는 작업을 하는 쓰레드의 우선 순위는 다른 작업을 수행하는 쓰레드에 비해 높아야 한다.

만약 A,B 두 쓰레드에게 거의 같은 양의 실행시간이 주어지지만, 우선순위가 다르다면 우선순위가 높은 A에게 상대적으로 B보다 더 많은 양의 실행시간이 주어지고 결과적으로 더 빨리 작업이 완료될 수 있다.


※ 쓰레드의 우선순위와 관련된 메서드와 필드

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가 된다.


class ThreadPriority {

public static void main(String args[]) {

A th1 = new A();

B th2 = new B();


th1.setPriority(4); // defalut 우선순위 5

th2.setPriority(7);


System.out.println("Priority of th1(-) : " + th1.getPriority() );

System.out.println("Priority of th2(|) : " + th2.getPriority() );

th1.start();

th2.start();

}

}


class A extends Thread {

public void run() {

for(int i=0; i < 300; i++) {

System.out.print("-");

for(int x=0; x < 10000000; x++);

}

}

}


class B extends Thread {

public void run() {

for(int i=0; i < 300; i++) {

System.out.print("|");

for(int x=0; x < 10000000; x++);

}

}

}

실행결과)

Priority of th1(-) : 4

Priority of th2(|) : 7

-||-||-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

th1과 th2 모두 main 메서드에서 생성하였기 때문에 main 메서드를 실행하는 쓰레드의 우선순위인 5를 상속받았다. 그 다음에는 th2.setPriority(7)로 th2의 우선순위를 7로 변경한 다음에 start()를 호출해서 쓰레드를 실행시켰다. 이처럼 쓰레드를 실행하기 전에만 우선 순위를 변경할 수 있다는 것을 기억하자.

--> 우선순위가 높은 th2의 실행시간이 th1에 비해 상당히 늘어난다.


List of Articles
번호 제목 날짜 조회 수
91 자바 정규식 마스킹처리 file 2018.06.26 2631
90 개인정보 마스킹처리 (휴대폰번호, 이메일) 2018.06.26 3941
89 자바 날짜 포맷 변환 방법 file 2018.06.21 1425
88 JDK 9에서 eclipse 실행이 안될때 2018.06.05 1596
87 숫자형식 포멧 방법 2018.02.09 2341
86 jquery 스크롤(scroll) 따라다니는 배너 레이어 / 위로 버튼 / 화면 상단으로 이동 / scroll layer 이벤트 file 2017.07.05 4057
85 BigDecimal타입의 사칙연산 2016.12.22 3713
84 다양한 문자 조합을 이용한 카운팅 구하기 2016.12.09 4941
83 자바 JXL 엑셀파일을 읽어 배열리턴 : JAVA EXCEL ArrayList 2016.12.09 4389
82 날짜 시간 포맷 제어 자바 클래스 : JAVA DateUtils Date time file 2016.12.09 5233
81 자바 다양한 형변환. 그리고 아스키 코드 String char int : JAVA 2016.12.09 4188
80 자바 XML 제어 라이브러리 XStream : JAVA 2016.12.09 4917
79 원하는 패턴의 날짜 구하기 : JAVA 2016.12.09 3598
78 iBATIS 동적으로 맵핑하기 2016.12.09 3949
77 GET 파라메타 쿼리문자열 컨트롤 : getQueryString 2016.12.09 4705
76 접근 제한자 private/ protected/ public / default file 2016.10.06 5136
75 예외처리(Exception handling)방법 file 2016.09.21 4585
74 My-SQL 을 이용한 JDBC file 2016.09.21 4282
73 static멤버와 관련된 예제 2016.09.21 3768
72 파일 읽고쓰는 암호화/복호화 2016.09.21 7385
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved