「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 9)



Thread-Per-Message 패턴



어떠한 명령이나 요구마다 새롭게 하나의 thread가 할당되어 그 thread가 처리를 실시한다. 이것이 Thread-Per-Message 패턴.

다음과 같은 예를 생각한다. Main 클래스가 Host 클래스에 문자를 표시하도록 요청합니다. Host 클래스는 그 요구를 처리하는 thread를 생성해 기동한다. 기동된 thread는 Helper 클래스를 사용해 실제의 표시를 실시한다.

(코드 전체는 본서를 참조)

Host.java
public class Host { 
    private final Helper helper = new Helper(); 
    public void request(final int count, final char c) { 
        new Thread() { 
            public void run() { 
                helper.handle(count, c); 
            } 
        }.start(); 
    } 
}

등장인물



클라이언트 역할
Client 역할은 Host 역할에 요청합니다. Host 역이 어떻게 그 요구를 실현하고 있는지, Client 역은 모른다. 샘플 프로그램에서는 Main 클래스가 이 역할을 맡았다.

호스트 역할
Host 역할은 Client 역할로부터 요청을 받으면 스레드를 새로 만들고 시작합니다. 새로 만들어진 스레드는 Helper 역할을 사용하여 요청을 처리합니다. 샘플 프로그램에서는 Host 클래스가 이 역할을 맡았다.

Helper 역할
Helper 역할은 요청을 처리하는 기능을 Host 역할에 제공합니다. Host 역할에 의해 만들어진 새로운 스레드가 Helper 역할을 이용한다. 샘플 프로그램에서는 Helper 클래스가 이 역할을 맡았다.

생각을 넓히는 팁



Thread-Per-Message 패턴에서 handle 메소드의 처리가 행해지는 순서는, request 메소드가 불려 간 순서대로는 아니다. 그 때문에, 처리의 순서가 의미를 가지는 경우에는, 이 패턴을 사용하는 것은 부적절.

Thread-Per-Message 패턴에서는, request 메소드측은 handle 메소드의 완료를 기다리지 않는다. 따라서 handle의 실행 결과는 request 측에서 얻을 수 없다. 따라서이 패턴은 처리 결과가 필요하지 않은 경우에 사용됩니다. 처리 결과가 필요한 경우에는 Future 패턴을 사용한다.

관련
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 1)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 2)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 3)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 4)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 5)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 6)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 7)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 8)

좋은 웹페이지 즐겨찾기