본문 바로가기

Development/Programming

[Java Design Patten] Two-Phase Termination 패턴


쓰레드가 일반적인 처리를 실행하고 있는 상태를 [작업중]이라고 부르고 이 쓰레드를 중단하고 싶은 때는 [종료 요구]를 합니다. 그리고 종료에 필요한 뒷정리를 시작할 때 [종료 처리 중] 이고 여기서 끝나면 진짜로 쓰레드가 종료합니다.

종료하는 역할


public class CountupThread extends Thread {

private long counter = 0;

private volatile boolean shutdownRequested = false;

public void shutdownRequest() {

shutdownRequested = true;

interrupt();

}

public boolean isShutdownRequested () {

return shutdownRequested;

}

public final void run () {

try {

while (!isShutdownRequested())

doWork();

} catch (final InterruptedException e) {

} finally {

doShutdown();

}

}

private void doWork () throws InterruptedException {

counter++;

System.out.println("doWork : counter = " + counter);

Thread.sleep(500);

}

private void doShutdown () {

System.out.println("doWork : counter = " + counter);

}

}


종료 요구를 제시하는 역할


public class Main {

public static void main (final String[] args) {

System.out.println("main: BEGIN");

try {

final CountupThread t = new CountupThread();

t.start();

Thread.sleep(100000);

System.out.println("main : shutdownRequest");

t.shutdownRequest();

System.out.println("main: join");

t.join();

} catch (final InterruptedException e) {

e.printStackTrace();

}

System.out.println("main: END");

}

}