ワーカースレッドの停止 (良い回答)

久々の「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」の第 8 章 Worker Thread の問題 8-6 (ワーカースレッドの停止)の悪い回答を Two-Phase Termination で書き直してみました。 Thread の raise メソッドを使えば Java の interrupt…

ワーカースレッドの停止

久々の「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」を Ruby で読むシリーズです。第 8 章 Worker Thread の問題 8-6 (ワーカースレッドの停止)を書いてみました。 Java の Thread インターフェースに似た動作をさせるために NameThr…

Sync_m による Read-Write Lock

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 6 章 Read-Write Lock パターンの補講 LIST 6-6 にならって、Ruby の添付ライブラリ sync.rb を使った Buffer クラスを書いてみました。 マニュアルによると Sync_m が 目…

ReadWriteLock

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 6 章 Read-Write Lock パターンは、共有ロックと排他ロックを併用する排他制御のパターンです。ReadLock が共有ロックで、WriteLock が排他ロックになっています。排他ロッ…

Exchanger

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 5 章 Producer-Consumer パターンの補講 2 の後半は、java.concurrent.Exchanger を試しています。2つのスレッドの間でオブジェクトを交換するクラスです。 記述の仕方です…

Table クラスを書いてみました

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 5 章 Producer-Consumer パターンの補講 2 の前半は、java.concurrent.BlockingQueue の実装クラスの紹介になっています。Ruby と対比させるとこんな感じ。 Java Ruby Link…

sleep関数とマルチスレッド

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 5 章 Producer-Consumer の補講 1 では、スリープ状態や待ち状態のキャンセルの説明です。 Java と Ruby のマルチスレッドを比べると、Java の方が例外処理など充実してい…

Producer-Consumer

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 5 章 Producer-Consumer パターンに進みます。データの生産者スレッドと利用者スレッドに機能を特化してスレッドを分けて、それらの間で(Queueを使って)データを受け渡す、…

Balking

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 4 章 Balking パターンに進みます。ロックを取っても、別にやることないじゃんとロックを返して素通りしてしまうやりかたにパターン名が付いているとは。ちょっとした驚き…

ConditionVariable

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 3 章 Guarded Suspension パターンに進みます。このパターンは複数のスレッドの同期を取る方法を扱います。登場するのは、ある条件の成立を待つ待機スレッド(達)と、その条…

Immutable Person#dead=(y)

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタ第 2 章 Immutable の最後に、問題 2-6 の逆を考えてみます。Immutable クラスの一部を変更可能にしたいというありがちなパターンです。例として、Immutable Person クラスに…

Immutable 補講 2

「isbn:4797331623」のデザパタその 2 Immutable の続きです。この章の補講 2 は Java のスレッドセーフではない java.util.ArrayList を扱っています。例 2 までは、immutable とは関連せず、これは第 1 章 Single Threaded Execution で扱った方がふさわし…

Immutable

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」のデザパタその 2 は Immutable。オブジェクトを不変にすることで、競合の危険性をなくすというものです。 Ruby で immutable なオブジェクトは、nil、false、true、Symbol、Numerical …

Inside ruby スレッドのさわり

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」を Ruby に置き換えつつ読んでいきます。前回はいきなり第 1 章に飛んだのですが、今回は「Introduction 1 スレッドとは何か」に戻って ruby 処理系のマルチ・スレッドの実装を調べてみ…

Synchronizable

結城浩(id:hyuki)さん著の「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」を買ってみました。 この手の本をまじめに読んでいくには、なんらかの楽しみがないとやっていられないので、Ruby のマルチスレッドで置き換えてみるという読み…