LoginSignup
3
4

More than 5 years have passed since last update.

『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その9)

Posted at

javathread.jpeg

Thread-Per-Messageパターン

何らかの命令や要求ごとに新しくひとつのスレッドが割り当てられ、そのスレッドが処理を行う。これがThread-Per-Messageパターン。

次のような例を考える。MainクラスがHostクラスへ文字の表示を依頼する。Hostクラスはその依頼を処理するスレッドを生成して起動する。起動されたスレッドは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役
Client役は、Host役に対して要求を出す。Host役がどのようにしてその要求を実現しているか、Client役は知らない。サンプルプログラムでは、Mainクラスがこの役をつとめた。

Host役
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)

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4