자바에서 쓰레드 그룹은 관련된 쓰레드를 묶어서 관리하는 데 사용되는 객체입니다. 쓰레드 그룹은 자바에서 쓰레드를 구조화하고 계층 구조로 표현할 수 있게 합니다. 주로 쓰레드를 논리적으로 그룹화하고 쓰레드 그룹 단위로 작업을 처리하기 위해 사용됩니다.
1. 쓰레드 그룹 생성
쓰레드 그룹은 ThreadGroup 클래스를 통해 생성됩니다. 생성자는 다음과 같습니다.
ThreadGroup group = new ThreadGroup("GroupName");
2. 쓰레드 그룹에 쓰레드 추가
ThreadGroup 클래스는 Thread 객체나 ThreadGroup 객체를 통해 쓰레드를 그룹에 추가하는 메서드를 제공합니다.
ThreadGroup group = new ThreadGroup("GroupName");
Thread thread1 = new Thread(group, "Thread1");
Thread thread2 = new Thread(group, "Thread2");
3. 쓰레드 그룹에 속한 쓰레드들의 목록 조회
ThreadGroup group = new ThreadGroup("GroupName");
Thread thread1 = new Thread(group, "Thread1");
Thread thread2 = new Thread(group, "Thread2");
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads);
for (Thread thread : threads) {
System.out.println(thread.getName());
}
4. 쓰레드 그룹의 부모 그룹 조회
ThreadGroup parentGroup = new ThreadGroup("ParentGroup");
ThreadGroup childGroup = new ThreadGroup(parentGroup, "ChildGroup");
System.out.println(childGroup.getParent() == parentGroup); // true
5. 예외 처리
쓰레드 그룹 내에서 발생한 예외를 처리하려면 uncaughtException 메서드를 오버라이드합니다.
class MyThread extends Thread {
public MyThread(ThreadGroup group, String name) {
super(group, name);
}
public void run() {
throw new RuntimeException("Exception from thread: " + Thread.currentThread().getName());
}
}
class MyExceptionHandler implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Exception occurred in thread " + t.getName() + ": " + e.getMessage());
}
}
public class ThreadGroupExample {
public static void main(String[] args) {
ThreadGroup group = new ThreadGroup("MyThreadGroup");
MyThread thread1 = new MyThread(group, "Thread1");
thread1.setUncaughtExceptionHandler(new MyExceptionHandler());
MyThread thread2 = new MyThread(group, "Thread2");
thread2.setUncaughtExceptionHandler(new MyExceptionHandler());
thread1.start();
thread2.start();
}
}
위의 예제에서는 ThreadGroup를 생성하고 그룹에 속한 두 개의 쓰레드가 예외를 발생시키도록 했습니다. 쓰레드의 예외를 처리하기 위해 setUncaughtExceptionHandler 메서드를 사용하여 예외 핸들러를 등록했습니다.
쓰레드 그룹은 쓰레드를 계층적으로 관리하고 쓰레드에 대한 작업을 단순화하기 위한 도구로 사용됩니다. 그러나 최근에는 Executor 프레임워크와 같은 고수준 도구들이 쓰레드 그룹을 대체하는데 더 많이 사용되고 있습니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 쓰레드의 실행제어 (0) | 2023.11.21 |
---|---|
자바 데몬 쓰레드(daemon thread) (0) | 2023.11.21 |
자바 쓰레드의 우선순위 (0) | 2023.11.21 |
자바 멀티쓰레드 (0) | 2023.11.21 |
자바 싱글쓰레드 (0) | 2023.11.21 |