반응형

쓰레드의 우선순위 (priority of thread)

  • 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다.

자바에서는 쓰레드의 우선순위를  1~10까지 부여할 수 있도록 되어있다.
기본적으로는 보통 우선순위 5로 만들어져 있다.
그래서 우리가 쓰레드를 만들고, 우선순위를 지정해주지 않으면 우선순위가 5로 된다.

만약에 우선순위를 변경하고 싶으면, setPriority 를 이용해서 우선순위를 지정해줄 수 있다.
우선순위는 쓰레드가 시작된 이후에도 변경할 수 있다.

쓰레드의 우선순위를 알고싶다면, getPriority()라는 메서드를 호출하면 우선순위를 반환한다.

 

쓰레드 th1과 th2가 있을 때, 이 두 쓰레드의 우선순위가 같은 경우에는 비슷한 시간을 할당받아서 작업을 수행하게 되고,

th1과 th2가 있을 때, th1의 우선순위가 높을 때는, th1이 더 많은 시간을 할당받는다.
그래서 결과적으로 A작업 th1이 더 먼저 끝난다.

 

우리가 정해주는 우선순위는 단지 희망사항에 불과하다.
왜냐하면, OS에서 돌아가고 있는 수많은 프로세스와 쓰레드 들이 있는데,
그것을 무시하고 우리가 실행하는 프로그램에만 특혜를 줄 수 없다.
OS의 스케줄러는 해당 OS에서 돌아가는 모든 프로세스와 쓰레드에 공평하게 돌아가야 한다.

 

[Ex13_6]

 


 

 쓰레드 그룹

  • 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것
  • 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.
  • 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 'main쓰레드 그룹'에 속한다.
  • 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위(5)를 상속받는다.

쓰레드 그룹은 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것이다.
그리고, 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.

그래서 쓰레드의 생성자를 보면, ThreadGroup gourp이렇게 그룹을 지정하는 생성자들이 있다.

그런데 지금까지는 우리는 쓰레드 그룹을 생성해준적도, 지정해준 적도 없다.
그렇지만, 반드시 하나의 쓰레드 그룹에 포함되어 있어야 하기 때문에,
쓰레드 그룹을 지정하지 않으면 해당 쓰레드는 반드시 'main쓰레드 그룹'에 속한다.

자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다

우리가 따로 쓰레드 그룹을 생성해서 만들 수도 있지만,
우리가 생성하는 쓰레드들은 'main쓰레드 그룹'에 기본적으로 속하게되어있다.

 

관련된 메서드로는 getThreadGroup()이라는 메서드가 있다. Thread클래스에 있는  것인데,
쓰레드 자신이 속한 쓰레드 그룹을 확인할 때 호출하는 메서드이다.

uncaughtException()는  ThreadGroup클래스에 있는 메서드인데,
원래는 예외가 처리되지 않으면 그 예외를 jvm이 처리하는데, 그것을 우리가 다른동작을 하도록 바꿀 수 있다.
지금은 예외 처리가 안돼면, printstackTrace가 호출되는데 다른것이 동작되도록 바꿀 수 있다.
마찬가지로 ThreadGroup에 있는 쓰레드가 예외처리를 못하고 죽었을 때, 실행될 동작을 우리가 오버라이딩 해줄 수 있다.
그럴때 사용하는 메서드이다.

 


 

쓰레드 그룹의 메서드

 

쓰레드는 기본적으로 쓰레드 그룹으로 묶여서 다뤄진다.
우리가 쓰레드를 관리할 때, 그룹으로 묶어서 관리할 수 있다.

반응형