Hello

Java 쓰레드의 우선순위, 쓰레드 그룹

by 볼빵빵오춘기

쓰레드의 우선순위

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

⇒ 자바에서는 1~10까지 우선순위를 매길 수 있다.

⇒ 쓰레드를 만들고 우선순위를 정해주지 않으면 5로 지정된다.

⇒ 사실은 os에 맞춰 돌아가게된다.

 

우리가 써준 우선순위는 희망사항에 불가하다. 희망사항을 os스케쥴러에게 전달하는 것 뿐이다.

 

 

예제 코드

import java.util.*;
import javax.swing.JOptionPane;

public class Try {

	static long startTime = 0;
	
	public static void main(String[] args) {

		ThreadEx6_1 th1 = new ThreadEx6_1();
		ThreadEx6_2 th2 = new ThreadEx6_2();

//		th1.setPriority(5); => 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 ThreadEx6_1 extends Thread {
	public void run() {
		for(int i=0; i < 300; i++) {
			System.out.print("-");
			for(int x=0; x < 10000000; x++);
		}
	}
}

class ThreadEx6_2 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(-) : 5
Priority of th2(|) : 7
-|-|-----------------------------------------------------------------------------------------------------------------------------------------------|||||||||----|||||||||---------------------------------------------------------------------------------------|||||||||||||||-----------------||||||||||||||||||||||||--|-|-|-|-------------------------|||||||||||||||||||||||||||--------||---------||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

⇒ 결과값을 보면 우선순위는 그냥 희망사항… 일 뿐

 

쓰레드 그룹

  • 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것이다.
  • 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.
    🤔 여태 우리는 쓰레드 생성해서 쓸 때 그룹을 설정해준적이 없다.
    why? 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 ‘main쓰레드 그룹’에 속한다.
  • 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다.

 

쓰레드 그룹의 메서드

  • ThreadGroup(String name)
    지정된 이름의 새로운 쓰레드 그룹을 생성한다.

 

  • ThreadGroup(ThreadGroup parent,String name)
    지정된 쓰레드 그룹에 포함되는 새로운 쓰레드 그룹을 생성한다.

 

  • int activeCount()
    쓰레드 그룹에 포함된 활성상태에 있는 쓰레드의 수를 반환한다.

 

  • int activeGroupCount()
    쓰레드 그룹에 포함된 활성상태에 있는 쓰레드 그룹의 수를 반환한다.

 

  • void checkAccess()
    현재 실행중인 쓰레드가 쓰레드 그룹을 변경할 권한이 있는지 체크한다.

 

  • void destroy()
    쓰레드 그룹과 하위 쓰레드 그룹까지 모두 삭제한다.(단, 비어있어야 삭제가능)

 

  • int enumerate(Thread[] list)
    int enumerate(Thread[] list, boolean recurse)
    int enumerate(ThreadGroup[] list)
    int enumerate(ThreadGroup[] list, boolean recurse)
    쓰레드 그룹에 속한 쓰레드 또는 하위 쓰레드 그룹의 목록을 지정된 배열에 담고 그 개수를 반환한다.
    두 번째 매겨변수인 recurse의 값을 true로 하면 쓰레드 그룹에 속한 하위 쓰레드 그룹에 쓰레드 또는 쓰레드 그룹까지 배열에 담는다.

 

  • int getMaxPriority()
    쓰레드 그룹의 최대우선순위를 반환한다.

 

  • String getName()
    쓰레드 그룹의 이름을 반환한다.

 

  • ThreadGroup getParent()
    쓰레드 그룹의 상위 쓰레드 그룹을 반환한다.

 

  • void interrupt()
    쓰레드 그룹에 속한 모든 쓰레드를 interrupt

 

  • boolean isDaemon()
    쓰레드 그룹이 데몬 쓰레드 그룹인지 확인

 

  • boolean isDestroyed()
    쓰레드 그룹이 삭제되었는지 확인

 

  • void list()
    쓰레드 그룹에 속한 쓰레드와 하위 쓰레드 그룹에 대한 정보를 출력한다. 

 

  • boolean parentOf(ThreadGroup g)
    지정된 쓰레드 그룹의 상위 쓰레드 그룹인지 확인한다. 

 

  • void setDaemon(boolean daemon)
    쓰레드 그룹을 데몬 쓰레드 그룹으로 설정/해제한다.

 

  • void setMaxPriority(int pri)
    쓰레드 그룹의 최대 우선순위를 설정

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기