[Java] thread - 2

eeminsu·2021년 12월 5일
0
post-thumbnail

자바의 정석을 통해 공부한 내용을 요약하였습니다.

1. 쓰레드의 우선순위

  • 쓰레드는 우선순위 속성을 가지고 있다.
  • 우선순위 값에 따라 쓰레드가 얻는 실행시간이 달라진다.
  • 우선순위를 서로 다르게 지정하여 특정 쓰레드가 더 많은 작업시간을 갖도록 할 수 있다.
  • ex) 파일 전송 기능이 있는 메신저의 경우 파일다운로드를 처리하는 쓰레드보다 채팅냉용을 전송하는 쓰레드의 우선순위가 더 높아야 사용자의 불편함이 없을 것이다.

1-1. 쓰레드의 우선순위 지정

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이다.
  • 숫자가 높을수록 우선순위가 높다.
  • 우선순위의 지정이 없을 시에는 자동으로 5가 된다.

1-2. 비고

  • OS마다 다른 방식으로 스케쥴링을 하기 때문에 OS에 따라 다른 결과를 얻을 수 있다.
  • OS 스케쥴러에 종속적이기 때문에 쓰레드의 우선순위에 따른 차등적인 실행이 어느정도 예측만 가능할 뿐 정확히 알 수 없다.
  • 쓰레드에 우선순위를 부여하는 대신 작업에 우선순위를 두어 PriorityQueue에 저장해 놓고 우선순위가 높은 작업이 먼저 처리되도록 하는 것이 더 나을 수 있다.


2. 쓰레드 그룹

  • 서로 관련된 쓰레드를 그룹으로 다루기 위한 것
Thread(ThradGroup group, String name);
Thread(ThradGroup group, Runnable target);
Thread(ThradGroup group, Runnable target, String name);
Thread(ThradGroup group, Runnable target, String name, long stackSize);
  • Thread의 생성자를 통해 쓰레드를 쓰레드 그룹에 포함시킬 수 있다.
  • 모든 쓰레드는 반드시 쓰레드 그룹에 포함되어야 한다.
  • 쓰레드 그룹을 지정하지 않으면 기본적으로 자신을 생성한 쓰레드와 같은 쓰레드 그룹에 속하게 된다.
  • 우리가 생성하는 모든 쓰레드 그룹은 main쓰레드 그룹의 하위 쓰레드 그룹이 된다.
  • 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 자동적으로 main쓰레드 그룹에 속하게 된다.
  • 아래는 Thread의 쓰레드 그룹과 관련 메서드이다.

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

profile
안되면 될 때까지

0개의 댓글