데몬 스레드
주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드입니다.
그렇기 때문에 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료됩니다.
적용 예로는 자동 저장, 가비지 컬렉터 등이 있는데 이 기능들은 주 스레드가 종료되면 같이 종료됩니다.
데몬 스레드 내용을 작성해준 후
public class DaemonThread extends Thread{
public void save(){
// 자동 저장
}
public void run(){
save();
}
}
메인 스레드에서 setDaemon 을 해주면 된다.
public class mainThread(){
public static void main(String[] args){
DaemonThread daemonThread = new DaemonThread();
daemonThread.setDaemon(true); // start() 보다 먼저 선언해주지 않으면 Exception 발생
daemonThread.start();
}
}
스레드 그룹
관련된 스레드를 묶어서 관리할 목적으로 이용한다.
스레드는 반드시 하나의 스레드 그룹에 포함되는데,
명시적으로 선언해주지 않으면 생성한 스레드와 같은 스레드 그룹에 속하게 된다.
// 스레드 그룹 이름 얻기
ThreadGroup group = Thread.currentThread().getThreadGroup();
String groupName = group.getName();
// 프로그래스 내에서 실행중인 모든 스레드 정보 얻기
// key = 스레드 객체 value = 스레드의 상태 기록을 갖고 있는 배열
Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
명시적으로 스레드 그룹을 만들고 싶을 경우
// 이름만 줄 경우
ThreadGroup group = new ThreadGroup(String name);
// 부모 ThreadGroup과 같이 줄 경우
// 부모 스레드 그룹을 지정하지 않을 경우 현재 스레드가 속한 그룹의 하위 그룹으로 생성
ThreadGroup group = new ThreadGroup(ThreadGroup parent, String name);
// 생성과 동시에 그룹을 줄 경우 (매개값 여러가지임)
Thread t = new Thread(ThreadGroup group,Runnable target, String name);
스레드를 그룹에 포함하면 어떤게 좋을까? 그룹내에 포함된 모든 스레드를 일괄 컨트롤할 수 있다는 점이다.
interrupt() 메서드 를 사용하여 그룹 안에 모든 스레드를 종료시킬 수 있다. (이 메서드는 포함된 모든 스레드의 interrupt() 메서드를 내부적으로 호출해주기 때문.)
public class ThreadGroup{
public static void main(String[] args){
// aejoeng 그룹에 두 스레드를 포함시킴
ThreadGroup group = new ThreadGroup("aejeong");
WorkThread workThreadA = new WorkThread(group,"workThreadA");
WorkThread workThreadB = new WorkThread(group,"workThreadB");
workThreadA.start();
workThreadB.start();
ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
// 현재 그룹에 포함된 스레드와 하위 그룹에 대한 정보를 출력
mainGroup.list();
// WorkThread에서 개별적으로 예외 처리한 InterruptedExcetion을 발생시켜 스레드를 종료한다.
group.interrupt();
}
}
반응형
'WEB > JAVA' 카테고리의 다른 글
[Lombok] Difference Between @Value and @Data (0) | 2022.03.11 |
---|---|
내가 보려고 정리하는 JAVA 멀티 스레드 5- 스레드풀 (0) | 2021.10.06 |
내가 보려고 정리하는 JAVA 멀티 스레드 3- 스레드 상태 (0) | 2021.10.05 |
내가 보려고 정리하는 JAVA 멀티 스레드 2 - 동기화 메서드와 동기화 블록 (0) | 2021.09.28 |
내가 보려고 정리하는 JAVA 멀티 스레드 1 - 멀티스레드 개념 (0) | 2021.09.13 |