프로그래밍 정리/자바

쓰레드의 우선권

주누다 2013. 6. 17. 12:48
반응형

- 쓰레드의 우선권을 어떻게 주는냐에 따라서 쓰레드의 작업 순서가 달라짐. 작업 순서가 달라진다는 것을 Runnable 상탱서 얼마나 자주 Run 상태가 될 수 있느냐를 말하는 것. 우선권이 높다면 Run 상태가 될 확률이 높아짐. 우선권이 높다면 다른 쓰레들보다 빨리 끝낼 수 있음. 


- Thread 클래스의 static 우선권 상수.

-> public static final int MIN_PRIORITY = 1;

-> public static final int NORM_PRIORITY = 5;

-> public static final int MAX_PRIORITY = 10;


- 우선권 문제

-> 어떠한 쓰레가 Run 상태를 많이 차지할 것인가의 문제.

-> 쓰레드의 우선권에 대한 값은 Thread 클래스의 public static final 멤버로 정의되어 있음. 쓰레드의 우선권을 셋팅하기 위해서 1부터 10까지의 수를 사용해도 되며, Thread의 스태틱 우선권 상수 변수를 사용해도 됨. 우선권을 설정하기 위해서는 다음과 같이 Thread의 setPriority() 메서드를 사용하면 됨.


- 쓰레드의 상태 설정

-> PriorityThread1 t = new PriorityThread();

-> t.setPriority(1);

-> // t.setPriority(Thread.MIN_PRIORITY);

-> // 우선권이 가장 낮은 상태


-> t.setPriority(5);

-> // t.setPriority(Thread.NORM_PRIORITY);

-> // 일반적인 쓰레드가 갖는 우선권


-> t.setPriority(10);

-> // t.setPriority(Thread.MAX_PRIORITY);

-> // 우선권이 가장 높은 상태


- 현재 실행중인 쓰레드의 우선권을 얻고자 한다면 다음과 같이 getPriority()를 사용하면 됨.

-> int p = t.getPriority();


- 우선권(Priority)

-> 쓰레드의 우선권을 설정하기 위해서 setPriority() 메서드를 사용.

    현재 설정되어 있는 우선권을 얻어내기 위해서 getPriority()를 사용.


===========================================================================================================



public class PriorityThread extends Thread implements Runnable{


@Override

public void run() {

// TODO Auto-generated method stub

int i = 0;

System.out.println(this.getName()); // 쓰레드의 이름 출력

System.out.println("[우선권 : " + this.getPriority() + "] 시작\t");

while(i < 1000){

i = i + 1;

try{

this.sleep(1);

}catch (Exception e) {

// TODO: handle exception

}

}

System.out.println(this.getName()); // 쓰레드의 이름 출력

System.out.println("[우선권 : " + this.getPriority() + "] 종료\t");

}

}



public class PriorityThreadMain {
public static void main(String[] args) {
System.out.println("메서드 시작");
for(int i=1; i<=10; i++){
PriorityThread s = new PriorityThread();
s.setPriority(i);
s.start();
}
}
}

===========================================================================================================

- sleep(1)을 사용한 이유(1은 1/1000초를 의미)
-> sleep(1)을 사용하면 작업을 약간 지연시키는 효과가 있음. 이것은 단순한 작업 처리에서 우선권이 어떻게 변화되는지를 눈으로 확인할 수 있음.


반응형