앞선 아티클에서 우리는 스레드 그룹 생성 기능을 살펴보았습니다.
당연한 의문인데, 이러한 스레드 그룹을 사용했을 때의 장점은 무엇이 있을까요? '그룹'으로 묶여있으니, 당연한 이야기지만 그룹을 일괄적으로 컨트롤이 가능하다는 장점이 있겠죠.
대표적인 예시가 interrupt( )입니다. ThreadGroup에서 제공하는 interrupt( ) 메서드를 사용하면, 그룹 내에 포함된 모든 스레드들을 일괄적으로 interrupt 할 수 있습니다. 스레드 10개를 종료하기 위해서 각각의 스레드에서 interrrupt( ) 호출을 총 10회 해야 하지만, 만일 이 스레드들이 같은 스레드 그룹에 속해있다면 스레드 그룹의 interrupt( ) 1회만 호출하면 됩니다.
참고로 이 ThreadGroup의 interrupt( )가 작동하는 원리는, 이 ThreadGroup의 interrupt( ) 메서드는 그룹에 포함된 모든 스레드의 interrupt( ) 메서드를 내부적으로 호출하는 방식입니다.
여기서 하나 파생되는 주의사항이 있습니다. ThreadGroup의 interrupt( ) 메서드는 소속 스레드 각각의 interrupt( )를 호출할 뿐, 개별 스레드에서 발생하는 InterruptedException에 대한 예외 처리를 하지 않습니다. 그래서 개별 스레드에서 예외 처리를 진행해야 합니다.
ThreadGruop이 가진 메서드는 아래와 같이 다양한게 준비되어 있습니다. 다만, stop( ) 등의 메서드는 deprecated되었습니다(위험성으로 인하여). suspend( ), resume( ), stop( ) 등은 현재는 사용하지 않으므로 interrupt( ) 메서드를 이용해 스레드들을 안전하게 종료하는 것이 좋습니다.
메서드 | 설명 | |
int | activeCount( ) | 현재 그룹 및 하위 그룹에서 활동 중인 모든 스레드의 수를 리턴 |
int | activeGroupCount( ) | 현재 그룹에서 활동 중인 모든 하위 그룹의 수를 리턴 |
void | checkAccess( ) | 현재 스레드가 스레드 그룹을 변경할 권한이 있는지 체크. 없을 경우 SecurityException을 발생한다. |
void | destroy( ) | 현재 그룹 및 하위 그룹을 모두 삭제함. 단, 그룹 내에 포함된 모든 스레드들이 종료 상태가 되어야 함 |
boolean | isDestroyed( ) | 현재 그룹이 삭제되었는지 여부를 리턴 |
int | getMaxPriority( ) | 현재 그룹에 포함된 스레드가 가질 수 있는 최대 우선순위 리턴 |
void | setMaxPriority(int pri) | 현재 그룹에 포함된 스레드가 가질 수 있는 최대 우선순위를 설정 |
String | getName( ) | 현재 그룹의 이름을 리턴 |
ThreadGroup | getParent( ) | 현재 그룹의 부모 그룹을 리턴 |
boolean | parentOf(ThreadGroup g) | 현재 그룹이 매개값으로 지정한 스레드 그룹의 부모인지 여부를 리턴 |
boolean | isDaemon( ) | 현재 그룹이 데몬 그룹인지 여부를 리턴 |
void | setDaemon(boolean daemon) | 현재 그룹을 데몬 그룹으로 설정 |
void | list( ) | 현재 그룹에 포함된 스레드와 하위 그룹에 대한 정보를 출력 |
void | interrupt( ) | 현재 그룹에 퐇마된 모든 스레드들을 interrupt |
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(9) - 스레드 풀 1 : 스레드 풀의 정의 (0) | 2025.01.05 |
---|---|
멀티 스레드(8) - 스레드 그룹 5 (2) | 2025.01.02 |
멀티 스레드(8) - 스레드 그룹 3 (1) | 2024.12.27 |
멀티 스레드(8) - 스레드 그룹 2 (1) | 2024.12.23 |
멀티 스레드(8) - 스레드 그룹 1 (0) | 2024.12.18 |