wiki@y-kurose

日々是好日。

ユーザ用ツール

サイト用ツール


本:java言語で学ぶデザインパターン入門マルチスレッド編

java言語で学ぶデザインパターン入門マルチスレッド編

入門書として

最初のたとえ話がありイメージをつかみやすい。 その後にサンプルのクラス図とシーケンス図、パターンのクラス図を見ればだいたい分かることができる。 それでも難しいところはコードと解説を読めば大丈夫。 結構分厚いので、分かるところまでコードと解説は読まなくても良いかもしれない。

出てくるパターンと概略のメモ

Single Thread Execution

  • スレッドセーフでない部分にはsynchrinizedなどを使い排他制御をかける

Immutable

  • 不変であることを保証すれば、スレッドについて気にしなくてよくなる

Guarded Suspension

  • whileとwaitで条件が整うまでスレッドを待つ

Balking

  • ガード条件が満たされなかったらすぐに中断

Producer-Consumer

  • ProducerがDataを作ってChannelに追加、ConsumerはChannelからデータを取り出して使用
    • Channelはキューやスタック、優先順位付きキューなど
    • 追加できないときや、取るものがないときは待つようにする

Read-Write Lock

  • 同時読み込みOKだが、その間は書き込み禁止にし、書いている間は一切禁止
  • java.utill.concurrent.locks.ReentrantReadWriteLockを使うとよい

Thread-Per-Message

  • 新しいスレッドに処理を任せて、自分は終了または別の処理をする

Worker Thread

  • スレッドを使いまわす
  • 複数のWorker Threadを抱えてるとスレッドプールとも呼ぶ
  • スループットの向上と、キャパシティの制御になる
  • 呼び出しと実行が分離される

Future

  • 処理終了後で結果を取れるようなオブジェクトをすぐに返す
  • 処理結果を得られるのが利点
  • 重い処理の反応性を上げることが出来き、戻り値の用意と利用が分離される

Two-Phase Termination

  • 終了処理をきちんとしてから終了
  • Thread.stopは危ないから使ってはいけない

Thread-Specific Storage

  • java.lang.ThreadLocalの話
  • 他のスレッドからアクセスさせない
  • スレッドプログラムにはアクターベースとタスクベースの考え方がある

Active Object

  • 非同期メッセージのやり取りをする

感想

  • いくつかのパターンは簡単に実装するためのクラスが既にjava.util.concurrentにあり便利
    • concurrentパッケージはじっくり見てみてもいいと思う
  • 付録Bにシングルトンについての話がありますが、「null判定の後にsynchronizedをかけて再度null判定をしている」たまに見かけるコードの問題点の説明が面白かった(どう問題があるのかは本を読んで下さい)


本/java言語で学ぶデザインパターン入門マルチスレッド編.txt · 最終更新: 2019/09/28 14:09 by y-kurose