은은하게 코드 뿌시기

쓰레드 그룹(thread group) 본문

자바/자바 기본

쓰레드 그룹(thread group)

은은하게미친자 2022. 7. 6. 00:36
728x90

:서로 관련된 쓰레드 그룹을 다루기 위한것으로, 폴더관리 개념과 비슷하다.

쓰레드 그룹에 다른 쓰레드 그룹을 포함 시킬 수 있다.

보안상의 이유로 도입된 개념으로, 자신이 속한 쓰레드그룹이나 하위 쓰레드 그룹은 변경 할 수 있지만 다른 쓰레드 그룹의 쓰레드를 변경할 수 없다. ThreadGroup을 사용하여 생성 한다. 모든 쓰레드는 반드시 쓰레드 그룹에 포함되어 있어야 하기 떄문에, 쓰레드그룹을 지정하는 생성자를 사용하지 않은 쓰레드는 기본적으로 자신을 생성한 쓰레드와 같은 쓰레드 그룹에 속하게 된다.

 

 

생성자/메서드 설명
ThreadGroup(String name) 지정된 이름의 새로운 쓰레드 그룹 생성
ThreadGroup(ThreadGroup parent, String name) 지정된 쓰레드그룹에 포함되는 새로운 쓰레드 그룹을 생성
int activeCount() 쓰레드그룹에 포함된 활성상태에 있는 쓰레드의 수의 반환
int activeGroupCount() 쓰레드 그룹에 포함된 활성상태에 있는 쓰레드 그룹의 수를 반환
void checkAccess() 현재 실행중인 쓰레드가 쓰레드 그룹을 변경할 권한이 있는지 체크, 만일 권한이 없다면 SecurityException을 발생
void destroy() 쓰레드 그룹과 하위 쓰레드 그룹까지 모두 삭제한다. 단, 쓰레드 그룹이나 하위 쓰레드 그룹이 비어있어야한다.
int enumerate(Thread[] list)
int enumerate(Thread[] list, boolean recurse)
int enumerate(ThreadGroup[] list)
int enumerate(ThreadGroup[] list, boolean recurse)


쓰레드 그룹에 속한 쓰레드 또는 하위 쓰레드 그룹의 목록을 지정ㄹ된 배열에 담고 그 개수를 반환,
두 번쨰 매개변수인 recurse의 값을 true로 하면 쓰레드 그룹에 속한 하위 쓰레드 그룹에 쓰레드 또는 쓰레드 그룹까지 배열에 담는다.
int getMaxPriority() 쓰레드 그룹의 최대우선순위를 반환
String getName() 쓰레드 그룹의 이름을 반환
ThreadGroup getParent() 쓰레드 그룹의 상위 쓰레드그룹을 반환
void interrupt() 쓰레드 그룹에 속한 모든쓰레드를 interrupt
boolean isDaemon() 쓰레드 그룹이 데몬쓰레드그룹인지 확인
boolean isDestroyed() 쓰레드 그룹이 삭제되었는지 확인
void list() 쓰레드 그룹에 속한 쓰레드와 하위 쓰레드그룹에 대한 정보를 출력
boolean parentOf(ThreadGroup g) 지정된 쓰레드그룹의 상위 쓰레드 그룹인지 확인
void setDaemon(boolean daemon) 쓰레드 그룹을 데몬 쓰레드그룹으로 설정/해제
void setMaxPriority(int pri) 쓰레드 그룹의 최대우선순위설정 , 쓰레드가 쓰레드 그룹에 추가 되기전에 호출 해야함.

쓰레드를 쓰레드 그룹에 포함시키려면 Thread 의 생성자를 이용해야한다.

 

*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)

*Thread 의 ThreadGroup과 연관된 메소드

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package kr.co.threadtest;
 
public class ThreadEx9 {
    
    public static void main(String[] args) {
        ThreadGroup main =  Thread.currentThread().getThreadGroup();
        ThreadGroup grp1 = new ThreadGroup("Group1");
        ThreadGroup grp2 = new ThreadGroup("Group2");
        
        ThreadGroup subGrp1 = new ThreadGroup(grp1, "SubGroup1");
        
        grp1.setMaxPriority(3);
        
        Runnable r =  new Runnable() {
            
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        };
        
        new Thread(grp1   ,  r, "th1").start();
        new Thread(subGrp1,  r, "th2").start();
        new Thread(grp2   ,  r, "th3").start();
        
        System.out.println(">>List of ThreadGroup : " + main.getName()
        + "active threadgroup : " + main.activeGroupCount()
        + "actvie thread" + main.activeCount());
        
        main.list();
        
    }
 
}
 
cs
수행결과
>>List of ThreadGroup : mainactive threadgroup : 3actvie thread4
java.lang.ThreadGroup[name=main,maxpri=10]
    Thread[main,5,main]
    java.lang.ThreadGroup[name=Group1,maxpri=3]
        Thread[th1,3,Group1]
        java.lang.ThreadGroup[name=SubGroup1,maxpri=3]
            Thread[th2,3,SubGroup1]
    java.lang.ThreadGroup[name=Group2,maxpri=10]
        Thread[th3,5,Group2]

 

728x90

'자바 > 자바 기본' 카테고리의 다른 글

java Calendar , date  (0) 2022.07.25
데몬쓰레드(daemon thread)  (0) 2022.07.06
쓰레드 우선순위  (0) 2022.07.05
스레드 기초 및 예제  (0) 2022.07.05
JAVA SQL DB 연동 소스 예제  (0) 2022.06.27
Comments