Java言語で学ぶデザインパターン入門 マルチスレッド編 第6章 Read-Write Lock
読むのは同時にできるけど誰かが読んでいるときは書き込めない。誰かが書き込んでいる間は読むのも書くのもできない。読む処理どうしは排他されないのでパフォーマンスが上がる。
public class ReadWriteLock { public synchronized void readLock() { while (0 < writers) { wait(); } readers++; } public synchronized void readUnlock() { readers--; notifyAll(); } public synchronized void writeLock() { while (0 < writers || 0 < readers) { wait(); } writers++; } public synchronized void writeUnlock() { writers--; notifyAll(); } }
Java言語で学ぶデザインパターン入門 マルチスレッド編 第5章 Producer-Consumer
一方でどんどんデータを生成し登録していき、他方でどんどんデータを取り出して利用するパターン。イベントディスパッチャなんかでよく使うね。
public class Channel { private List queue = new LinkedList(); public synchronized void put(Data data) { while (MAX_SIZE <= queue.size()) { wait(); } queue.addLast(data); notifyAll(); } public synchronized Data take() { while (queue.size() <= 0) { wait(); } Data data = queue.removeFirst(); notifyAll(); return data; } }
Java言語で学ぶデザインパターン入門 マルチスレッド編 第4章 Balking
Balkingは「ボーキング」で、「やめて帰る」こと。野球のボークね。Guarded Suspensionは条件が満たされるまで待つんだけど、Balkingは条件が満たされなかったすぐ終了する。
public class GuardedObject { public synchronized void guardedMethod() { if (![ガード条件]) { return; } [目的の処理] } public synchronized void stateChangingMethod() { [状態を変化させる] } }
これはwait(), notifyAll()は使わないのね。
Java言語で学ぶデザインパターン入門 マルチスレッド編 第3章 Guarded Suspension
ある条件が満たされないと実行できない処理があって、別のスレッドがその条件を変化させることによって実行を制御するパターン。「条件付きのsynchronized」「マルチスレッド版のif」だそうです。
public class GuardedObject { public synchronized void guardedMethod() { while (![ガード条件]) { wait(); } [目的の処理] } public synchronized void stateChangingMethod() { [状態を変化させる] notifyAll(); } }
Java言語で学ぶデザインパターン入門 マルチスレッド編 第1章 Single Threaded Execution
AWDwRを読み終わって日記を書くモチベーションが下がっちゃったんで、新しい本を読んで行こうかな。で、今の案件でマルチスレッドを扱うので「Java言語で学ぶデザインパターン入門 マルチスレッド編 」を読むことにしましたよ。(って、今からかよっ!)
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2002/06
- メディア: 単行本
- クリック: 34回
- この商品を含むブログ (46件) を見る
というわけでまずは第1章「Single Threaded Execution」
複数のスレッドから同時に実行されるとまずいメソッドは同時に一つのスレッドからしか実行されないようにガードしましょう。具体的にはsynchronizedメソッドにする。
public synchronized void unsafeMethod() { ... }
ま、これは普通のsynchronizedメソッドの話だね。
「Agile Web Development with Rails 勉強記」まとめ
- Chapter 7 "Task B: Catalog Display"
- Chapter 8 "Task C: Cart Creation"
- Chapter 9 "Task D: Checkout!"
- Chapter 10 "Task E: Shipping"
- Chapter 11 "Task F: Administrivia"
- Chapter 12 "Task T: Testing"
- Chapter 13 "Rails in Depth"
- Chapter 14 "Active Record Basics"
- Chapter 15 "More Active Record"
- Chapter 16 "Action Controller and Rails"
- Chapter 17 "Action View"
- Chapter 18 "The Web, V2.0"
- Chapter 19 "Action Mailer"
- Chapter 20 "Web Services on Rails"
- Chapter 21 "Securing Your Rails Application"
- Chapter 22 "Deployment and Scaling"