쓰레드의 우선순위와 쓰레드 그룹

2022. 2. 14. 17:08·자바/프로세스와 쓰레드

1. 쓰레드의 우선순위에 대한 개념

- 쓰레드는 기본적으로 우선순위라는 속성(멤버변수)를 가진다.

- 이 값에 따라 실행시간이 달라진다.

- 쓰레드가 가질 수 있는 우선순의 값 범위는 1~10이며 높을수록 높다. 

- 기본적으로 5의 값을 가진다.

 

- 만약 각각 쓰레드 th1, th2는 7와 5의 우선순위를 가진다면, 싱글 코어에서는 th1부터 먼저

실행하게 되며, th2보다 더 빨리 작업을 마친다. 그러나 만약 멀티코어에서 수행하게 되면

th1이 더 빨리 수행되긴하지만 거의 차이 없이 똑같이 번갈아가면서 출력한다.

 

( 멀티코어에서는 별 차이가 없을정도가 아니라 전혀 없다. )

( 그러므로, 우선순위를 부여하는 대신 PriorityQueue 클래스에 저장해 놓고, 우선순위가 높은

작업을 먼저 처리하는 것이 낫다. )

 

 

( 위의 그림은 싱글 코어로 두 개의 쓰레드로 두 개의 작업을 실행했을 때의 결과를 보여준다. )

( 싱글코어에서는 확실히 똑같은 시간에서 작업량의 차이가 나지만, 멀티코어는 의미가 없어진다. )

 

 

 

 

2. 쓰레드 그룹

- 쓰레드 그룹은 말 그대로 쓰레드의 그룹이며, 우리가 파일을 다루는 것과 같다.

- 만들어진 이유는 보안상 때문인데, 자신이 속한 그룹의 쓰레드나 하위 쓰레드를 변경할 수

있지만, 서로 다른 그룹의 쓰레들끼리는 서로 변경할 수 없다.

 

- 모든 쓰레드는 쓰레드 그룹에 속해야한다. 그러므로, JVM은 main과 system을 만들고

운영에 필요한 쓰레드를 생성해서 그룹에 포함시킨다.

( 예를 들어, main 메서드는 main 쓰레드 그룹에, Finalizer 쓰레드는 system에 속한다. )

 

- 우리가 생성하는 모든 쓰레드 그룹은 main 쓰레드 그룹의 하위 쓰레드 그룹이다.1

 

 

- 쓰레드 그룹과 관련된 메서드는 아래와 같다.

메서드 설명
ThreadGroup getThreadGroup() 쓰레드 자신이 속한 쓰레드 그룹을 반환한다.
void uncaughtException(Tread t, Throwable e) 쓰레드 그룹의 쓰레드가 처리되지 않은 예외에 의해 실행이 종료되었을 때, JVM에 의해 이 메서드가 자동적으로 호출된다.

 

 

 

 

2-1. 쓰레드 그룹을 이해하기 위한 예제(1)

: 기본적으로 쓰레드를 만들고 그룹을 생성하여 그에 대한 정보를 출력해보는 예제이다.

 

public class Exercise006 {

	public static void main(String[] args) {
		ThreadGroup main = Thread.currentThread().getThreadGroup();
		ThreadGroup grp1 = new ThreadGroup("Group1");
		ThreadGroup grp2 = new ThreadGroup("Group2");
		
		//ThreadGroup(ThreadGroup parent ,String name)
		ThreadGroup subGrp1 = new ThreadGroup(grp1, "SubGroup1");
		
		grp1.setMaxPriority(3);
		
		Runnable r = new Runnable() {
			@Override
			public void run() {
				try {
					Thread.sleep(1000);
				}catch (Exception e) {
					// TODO: handle exception
				}
				
			}
		};
		//Thread(ThreadGroup tg, Runnable r, String name)
		new Thread(grp1, 	r, "th1").start();
		new Thread(grp2, 	r, "th2").start();
		new Thread(subGrp1, r, "th1-1").start();
		
		
		System.out.println(">>List of ThreadGroup: " + main.getName()
				+", Active ThreadGroup: " + main.activeGroupCount()
				+", Active Thread: " + main.activeCount());
		main.list();
	}
}

 

( currentThread()는 현재 실행중인 쓰레드의 참조를 반환한다. )

 

( 새로 생성된 쓰레드 그룹은 main 쓰레드 그룹의 하위 그룹으로 포함된다. )

 

( setMaxPriority(3)을 grp1에 했더니, 하위 그룹에게도 영향을 주었다. )

 

( 참조변수 없이 new Thread()로 만들었는데, 가비지 컬렉터의 제거대상이 되지 않는다. )

( 그 이유는 이 쓰레드의 참조가 ThreadGroup에 저장되어 있기 때문이다. )

'자바 > 프로세스와 쓰레드' 카테고리의 다른 글

쓰레드의 실행제어  (0) 2022.02.20
데몬 쓰레드  (0) 2022.02.14
싱글쓰레드와 멀티쓰레드  (0) 2022.02.14
쓰레드의 기본적 구현과 실행  (0) 2022.02.14
프로세스와 쓰레드의 전반적인 개념  (0) 2022.02.14
'자바/프로세스와 쓰레드' 카테고리의 다른 글
  • 쓰레드의 실행제어
  • 데몬 쓰레드
  • 싱글쓰레드와 멀티쓰레드
  • 쓰레드의 기본적 구현과 실행
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      java.time 패키지
      안정 정렬
      스트림
      serializable
      제자리 정렬
      코딩트리조별과제
      코딩테스트
      람다식
      Collections Framework
      중간연산
      문자 기반 스트림
      TCP 소켓 프로그래밍
      ServerSocket
      코드트리
      안드로이드 스튜디오
      알고스팟
      snail
      file
      선택 정렬
      다형성
      java.lang패키지
      Arrays
      outputstream
      소켓 프로그래밍
      불안정 정렬
      자바 개념
      유용한 클래스
      InputStream
      map()
      역직렬화
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    쓰레드의 우선순위와 쓰레드 그룹
    상단으로

    티스토리툴바