본문 바로가기

Programming/JAVA

멀티 스레드(8) - 스레드 그룹 5

 

 

 

 

앞선 아티클에서 ThreadGroup 메서드를 살펴보았습니다. 이제 이 내용을 기반으로 예제를 작성해 보겠습니다. 

 

 

 

멀티 스레드(8) - 스레드 그룹 4

앞선 아티클에서 우리는 스레드 그룹 생성 기능을 살펴보았습니다.    멀티 스레드(8) - 스레드 그룹 3스레드 그룹을 명시적으로 선언하는 방법도 있습니다. ThreadGroup 생성자를 이용해서 객체

nozeroslope.tistory.com

 

 

아래 예제에서 스레드 그룹을 생성하고, 정보를 출력한 다음 3초 후 스레드 그룹의 interrupt( ) 메서드를 호출하여 스레드 그룹에 포함된 모든 스레드를 일괄 종료시킵니다. 여기서는 Thread 클래스의 생성자도 중요하게 사용되니 다시 확인합니다.

 

 

 

멀티 스레드(8) - 스레드 그룹 3

스레드 그룹을 명시적으로 선언하는 방법도 있습니다. ThreadGroup 생성자를 이용해서 객체를 생성하는 방식입니다. 이 때 생성자에서 ThreadGroup의 이름만 파라미터로 줄 수 있고, 부모 ThreadGroup과

nozeroslope.tistory.com

 

 

 

public class ExampleMain {
	public static void main(String[] args) {
		ThreadGroup myGroup = new ThreadGroup("myGroup");
		WorkThread workThreadA = new WorkThread(myGroup, "workThreadA");
		WorkThread workThreadB = new WorkThread(myGroup, "workThreadB");
		
		workThreadA.start();
		workThreadB.start();
		
		System.out.println("[ main 스레드 그룹의 list() 메서드 출력 내용 ]");
		ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
		mainGroup.list();
		System.out.println();
		
		try { Thread.sleep(3000); } catch (InterruptedException e) {}
		
		System.out.println("[ myGroup 스레드 그룹의interrupt() 메서드 호출 ]");
		myGroup.interrupt();
	}
}

/* 출력
[ main 스레드 그룹의 list() 메서드 출력 내용 ]
java.lang.ThreadGroup[name=main,maxpri=10]
    Thread[main,5,main]
    java.lang.ThreadGroup[name=myGroup,maxpri=10]
        Thread[workThreadA,5,myGroup]
        Thread[workThreadB,5,myGroup]

[ myGroup 스레드 그룹의interrupt() 메서드 호출 ]
workThreadB interruped
workThreadA interruped
workThreadB종료됨
workThreadA종료됨
*/

 

 

// InterruptedException 발생 시 스레드가 종료되도록 함
public class WorkThread extends Thread {
	public WorkThread(ThreadGroup threadGroup, String threadName) {
		/* 스레드 그룹과 스레드 이름을 설정한다. 특정 스레드를 생성하면서, 
		 * 해당 스레드의 생성자에 스레드 그룹과 이름을 전달하면 
		 * 그 스레드는 전달된 스레드 그룹의 소속이 된다.
		 */
		// 부모 클래스인 Thread의 생성자 중 하나가 호출된다.
		super(threadGroup, threadName);
	}
	
	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
				// InterruptedException 발생 시, while문 빠져나와 스레드 종료
			} catch (InterruptedException e) {
				System.out.println(getName() + " interruped");
				break;
			}
		}
		System.out.println(getName() + "종료됨");
	}
}

 

 

 

 

nozeroslope님의
글이 좋았다면 응원을 보내주세요!