SlideShare a Scribd company logo
Two-Phase Termination 뒷정리를 하고 나서 자도록 해요JAVA 언어로 배우는 디자인 패턴 입문 – 멀티쓰레드 편<아키텍트를 꿈꾸는 사람들>2008.06.14  현수명
2단계 종료!작업중종료 1단계종료요구종료 처리중종료 2단계종료처리완료
Main:CountupThreadstartisShutdownRequestedfalsedoWorkisShutdownRequestedfalsedoWorkshutdownRequestisShutdownRequestedjointruedoShutdown
Two-Phase Termination CodePublic final void run(){   try {      while ( !isShutdownRequested() ) {doWork();      }   } catch (InterruptedException e) {   } finally {doShutdown();   }종료요구가 있었는가‘try...finally 사용’작업 처리종료 처리
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 (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(“doShutDown”);   }예제소스public class Main {   public static void main(String[] args) {      System.out.println(“main:BEGIN”);      try {         CountupThread t = new CountupThread();t.start();         Thread.sleep(10000);         t.shutdownRequest();         t.join();      } catch (InterruptedException e) {         e.printStackTrace();      }   }
Two-Phase Termincation패턴TerminatorRequestsshutdown-shutdownRequestedTerminationRequester+shutdownRequest {concurrent}+isShutdownRequested {concurrent}+run { frozen }#doWork#doShutdown
우아하게 종료하는 쓰레드안정성“이제 그만 자야지”라는 엄마의 이야기에 황급히 치우다가장난감을 망가뜨리는 일이 없도록 주의하자생존성장난감을 어질러 놓은채로 잠들지 않도록 하자응답성엄마가 “치우세요”라고 이야기하면 가능한 빨리 치우기 시작하자
생각의 폭을 넓히자Stop 메소드를 사용하지말자   -> 안정성이 보장되지 않음플래그 테스트만으로는 충분하지 않아요   -> sleep 중일때를 대비하여 interrupt 필요함인터럽트 상태 테스트만으로도 충분하지 않아요   -> InterruptedException 을 무시하는경우 고려무거운처리를 하기전에 종료요구를 체크   -> 응답성Join 메소드와 isAlive 메소드   -> 쓰레드가 종료되기를 기다림ExecutorService 인터페이스   -> Two-Phase Termination 패턴이 사용됨
보강1. 쓰레드의 Interrupt 상태   Interrupt() 함수를 호출하면 대상 쓰레드는 항상               InterruptedException 을 통보하는게 아님.2. concurrent 패키지   Java.util.concurrent.CountDownLatch      -> 10개의 일이 모두 끝나기를 기다린다.   Java.util.concurrent.CyclicBarrier      -> 3개의 쓰레드모두 N 단계를 종료할때까지 어떤 쓰레드도           N단계+1 로 나아가지 않는다.3. Volatile   synchronized 는 배타제어와 동기화. Volatile 은 동기화만 이루어짐.   volatile 필드에 입력한 내용은 다른 쓰레드가 곧바로 볼수있음.reorder 가 일어나지 않음.
정리종료하기전에 특정 종료처리를 실행.종료요구 flag 를 이용하여 주기적으로 종료요청 여부판단실행시 예외가 발생하더라도 확실하게 종료 처리를 시키기 위해서 try...finally 사용
ReferenceJava로 배우는 멀티쓰레드패턴 Ch.10
끝감사합니다.soomong80@gmail.com2008.06.14현수명

More Related Content

PPTX
Multi-thread : producer - consumer
PPTX
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
PPTX
Thread programming
PDF
Multi thread
PPTX
Smc–state machinecompiler
PDF
Lock free queue
PDF
비동기 파일 로딩
PPT
Multithread & shared_ptr
Multi-thread : producer - consumer
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
Thread programming
Multi thread
Smc–state machinecompiler
Lock free queue
비동기 파일 로딩
Multithread & shared_ptr

What's hot (20)

PPTX
tcp ip study
PDF
242 naver-2
PPTX
Thread
PDF
Ndc12 2
PDF
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
PDF
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PDF
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
DOC
D2 Job Pool
PDF
190325 synchro
PDF
안드로이드 멀티스레딩 입문 송형주
PDF
LockFree Algorithm
PDF
Concurrency in action - chapter 7
PDF
Concurrency in action - chapter 5
PDF
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
PPTX
11장 윈도우 스레드 풀
PPTX
windows via c++ Ch 5. Job
PDF
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PDF
7가지 동시성 모델-2장
PDF
함수형사고 3장 양도하라
PDF
[Live coding] 2회 5 23 (camp-exam_javalanguage)
tcp ip study
242 naver-2
Thread
Ndc12 2
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
D2 Job Pool
190325 synchro
안드로이드 멀티스레딩 입문 송형주
LockFree Algorithm
Concurrency in action - chapter 7
Concurrency in action - chapter 5
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
11장 윈도우 스레드 풀
windows via c++ Ch 5. Job
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
7가지 동시성 모델-2장
함수형사고 3장 양도하라
[Live coding] 2회 5 23 (camp-exam_javalanguage)
Ad

Viewers also liked (14)

PPTX
Domain Driven Design
PPTX
Dependency Breaking Techniques
PDF
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
PPTX
Distributed systems and scalability rules
PPTX
Promise 패턴 공부
PPTX
Scalable Web Architecture and Distributed Systems
PPT
Scalable Web Architecture
PPT
Design principles of scalable, distributed systems
PDF
Scalable Internet Architecture
PDF
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
PDF
High Scalability by Example – How can Web-Architecture scale like Facebook, T...
PDF
Scalability Design Principles - Internal Session
PPTX
Fault tolerance in distributed systems
PPT
7 Stages of Scaling Web Applications
Domain Driven Design
Dependency Breaking Techniques
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
Distributed systems and scalability rules
Promise 패턴 공부
Scalable Web Architecture and Distributed Systems
Scalable Web Architecture
Design principles of scalable, distributed systems
Scalable Internet Architecture
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
High Scalability by Example – How can Web-Architecture scale like Facebook, T...
Scalability Design Principles - Internal Session
Fault tolerance in distributed systems
7 Stages of Scaling Web Applications
Ad

Similar to Design Pattern - Multithread Ch10 (20)

PDF
Multithread design pattern
PDF
android_thread
PDF
[1B4]안드로이드 동시성_프로그래밍
PDF
Spring Boot 2
PDF
Effective unit testing ch3. 테스트더블
PDF
Spring Cloud Workshop
PDF
[2D4]Python에서의 동시성_병렬성
PDF
C++ Concurrency in Action 9-2 Interrupting threads
PDF
Clean code appendix 1
PPTX
Rx java essentials
PPTX
11장 윈도우 스레드 풀 + 12장 파이버
PPTX
C++ 프로젝트에 단위 테스트 도입하기
PDF
.NET에서 비동기 프로그래밍 배우기
PPT
Gcd ppt
PDF
MutiCore 19-20
PDF
[143] Modern C++ 무조건 써야 해?
PDF
KGC2010 - 낡은 코드에 단위테스트 넣기
PDF
Javascript 조금 더 잘 알기
PPTX
Startup JavaScript 3 - 조건문, 반복문, 예외처리
PPTX
Easy gameserver
Multithread design pattern
android_thread
[1B4]안드로이드 동시성_프로그래밍
Spring Boot 2
Effective unit testing ch3. 테스트더블
Spring Cloud Workshop
[2D4]Python에서의 동시성_병렬성
C++ Concurrency in Action 9-2 Interrupting threads
Clean code appendix 1
Rx java essentials
11장 윈도우 스레드 풀 + 12장 파이버
C++ 프로젝트에 단위 테스트 도입하기
.NET에서 비동기 프로그래밍 배우기
Gcd ppt
MutiCore 19-20
[143] Modern C++ 무조건 써야 해?
KGC2010 - 낡은 코드에 단위테스트 넣기
Javascript 조금 더 잘 알기
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Easy gameserver

More from hyun soomyung (20)

PPTX
아꿈사 매니저소개
PPTX
HTML5 & CSS3 - Video,Audio
PPTX
Hybrid app
PPTX
MapReduce
PPTX
MongoDB
PPTX
The Art of Computer Programming 2.4 다중연결구조
PPTX
The Art of Computer Programming 2.3.2 Tree
PPTX
The Art of Computer Programming 1.3.2 MIXAL
PPTX
The Art of Computer Programming 1.2.5
PPTX
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
PPTX
Clojure Chapter.6
PPTX
프로그래머의 길,멘토에게 묻다 2장
PPTX
[페차쿠차] 배움의 기술
PDF
실전 윈도우 디버깅. Ch3. 디버거 해부
PPTX
xUnitTestPattern/chapter8
PPTX
예제로 보는 Pattern 연상법
PPTX
프로그램은 왜 실패하는가?
PPTX
PPTX
5장 그래프의 비밀 (Programming Game AI by Example)
PPTX
이산수학 Ch.5
아꿈사 매니저소개
HTML5 & CSS3 - Video,Audio
Hybrid app
MapReduce
MongoDB
The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.2.5
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
Clojure Chapter.6
프로그래머의 길,멘토에게 묻다 2장
[페차쿠차] 배움의 기술
실전 윈도우 디버깅. Ch3. 디버거 해부
xUnitTestPattern/chapter8
예제로 보는 Pattern 연상법
프로그램은 왜 실패하는가?
5장 그래프의 비밀 (Programming Game AI by Example)
이산수학 Ch.5

Design Pattern - Multithread Ch10

  • 1. Two-Phase Termination 뒷정리를 하고 나서 자도록 해요JAVA 언어로 배우는 디자인 패턴 입문 – 멀티쓰레드 편<아키텍트를 꿈꾸는 사람들>2008.06.14 현수명
  • 2. 2단계 종료!작업중종료 1단계종료요구종료 처리중종료 2단계종료처리완료
  • 4. Two-Phase Termination CodePublic final void run(){ try { while ( !isShutdownRequested() ) {doWork(); } } catch (InterruptedException e) { } finally {doShutdown(); }종료요구가 있었는가‘try...finally 사용’작업 처리종료 처리
  • 5. 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 (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(“doShutDown”); }예제소스public class Main { public static void main(String[] args) { System.out.println(“main:BEGIN”); try { CountupThread t = new CountupThread();t.start(); Thread.sleep(10000); t.shutdownRequest(); t.join(); } catch (InterruptedException e) { e.printStackTrace(); } }
  • 7. 우아하게 종료하는 쓰레드안정성“이제 그만 자야지”라는 엄마의 이야기에 황급히 치우다가장난감을 망가뜨리는 일이 없도록 주의하자생존성장난감을 어질러 놓은채로 잠들지 않도록 하자응답성엄마가 “치우세요”라고 이야기하면 가능한 빨리 치우기 시작하자
  • 8. 생각의 폭을 넓히자Stop 메소드를 사용하지말자 -> 안정성이 보장되지 않음플래그 테스트만으로는 충분하지 않아요 -> sleep 중일때를 대비하여 interrupt 필요함인터럽트 상태 테스트만으로도 충분하지 않아요 -> InterruptedException 을 무시하는경우 고려무거운처리를 하기전에 종료요구를 체크 -> 응답성Join 메소드와 isAlive 메소드 -> 쓰레드가 종료되기를 기다림ExecutorService 인터페이스 -> Two-Phase Termination 패턴이 사용됨
  • 9. 보강1. 쓰레드의 Interrupt 상태 Interrupt() 함수를 호출하면 대상 쓰레드는 항상 InterruptedException 을 통보하는게 아님.2. concurrent 패키지 Java.util.concurrent.CountDownLatch -> 10개의 일이 모두 끝나기를 기다린다. Java.util.concurrent.CyclicBarrier -> 3개의 쓰레드모두 N 단계를 종료할때까지 어떤 쓰레드도 N단계+1 로 나아가지 않는다.3. Volatile synchronized 는 배타제어와 동기화. Volatile 은 동기화만 이루어짐. volatile 필드에 입력한 내용은 다른 쓰레드가 곧바로 볼수있음.reorder 가 일어나지 않음.
  • 10. 정리종료하기전에 특정 종료처리를 실행.종료요구 flag 를 이용하여 주기적으로 종료요청 여부판단실행시 예외가 발생하더라도 확실하게 종료 처리를 시키기 위해서 try...finally 사용