- [Java 정리] Thread 22022년 08월 13일
- starryeye
- 작성자
- 2022.08.13.:30
이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자.
쓰레드 우선순위
쓰레드의 start() 메서드를 호출하기 전에 쓰레드의 우선순위를 정할 수 있다.
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 = 5main 쓰레드의 우선순위는 5 이며,
쓰레드의 우선순위는 쓰레드를 생성한 쓰레드와 동일한 우선순위로 셋팅된다.
<참고>
멀티 코어 환경에서 두개의 쓰레드로 각각 하나의 작업, 총 두개의 작업을 돌릴 경우엔
당연하게도 우선순위에 따른 차이가 전혀 없다.
(하지만.. OS, JVM에 따라 정책이 다르므로 확인은 필요하다.)
쓰레드 그룹
쓰레드 그룹은 보안상의 이유로 도입된 개념이다.
모든 쓰레드는 반드시 쓰레드 그룹에 포함되어 있어야 한다.
기본적으로 자신을 생성한 쓰레드와 같은 쓰레드 그룹에 속하게 된다.
자신이 속한 쓰레드 그룹이나 하위 쓰레드 그룹은 변경 가능하지만,
다른 쓰레드 그룹의 쓰레드를 변경은 불가능하다.
쓰레드 그룹 지정은 쓰레드를 생성할 때 Thread 생성자를 이용한다.
Thread(ThreadGroup group, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)<참고>
자바 어플리케이션이 실행되면 JVM은 main과 system이라는 쓰레드 그룹을 만든다.
system ThreadGroup
JVM 운영에 필요한 쓰레드를 포함시킨다.
(GC를 수행하는 Finalizer 쓰레드가 system 쓰레드 그룹에 속한다.)
main ThreadGroup
개발자가 생성하는 모든 쓰레드 그룹은 main 쓰레드 그룹의 하위 쓰레드 그룹이 된다.
쓰레드 그룹을 지정하지 않으면 main 쓰레드 그룹에 속한다.
쓰레드를 생성하면.. 해당 인스턴스의 참조는 속하게된 쓰레드 그룹에 저장된다.
-> GC의 제거 대상이 되지 않는다.
<참고>
main 쓰레드에서 참조 변수 없이, 쓰레드 그룹 지정 없이 쓰레드를 생성하면
main ThreadGroup에 포함되기 때문에 GC의 대상이 되지 않는다.
데몬 쓰레드
데몬 쓰레드는 다른 일반 쓰레드(사용자 쓰레드, User Thread)의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다.
사용자 쓰레드가 모두 종료되면 모든 데몬 쓰레드는 모두 종료된다.
-> 따라서 프로세스의 종료 시점은 사용자 쓰레드가 모두 종료되는 시점이다.
관련 메서드
boolean isDaemon()
void setDaemon(boolean on)setDaemon() 메서드는 해당 쓰레드를 데몬 쓰레드로 설정하는 쓰레드이다.
start() 메서드를 호출하기 전에 셋팅 해줘야 한다.
대표적인 데몬 쓰레드는 어떤게 있을까?
GC, 화면 갱신 쓰레드, 워드 프로세서의 자동 저장 쓰레드 등이 있다.
쓰레드의 생성에서 소멸까지
(위 번호의 순서대로 쓰레드가 수행되는 것은 아니다.)
쓰레드의 실행을 제어하는 메서드로
쓰레드의 상태를 제어할 수 있다. 이를 그림으로 나타낸게 위 그림이다.
suspend(), resume(), stop() 메서드는 메서드 정의 document에 "Deprecated"라 적혀있다.
사용하지 말자라는.. 뜻이다.. 교착상태(Dead-lock)를 쉽게 유발한다.
'Java' 카테고리의 다른 글
[Java 정리] Thread 4 (0) 2022.08.22 [Java 정리] Thread 3 (0) 2022.08.19 [Java 정리] Thread 1 (0) 2022.08.13 [Java 정리] String, final, Immutable (0) 2022.08.05 [Java 정리] Garbage Collector 1 (0) 2022.07.30 다음글이전글이전 글이 없습니다.댓글