Immutable なクラスとスレッドの名称

「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」の第二章『Immutable』を読み進めている.簡単に内容を説明すると,排他制御など使わずともそもそもインスタンスが作られてからフィールドの値が変化しないものはマルチスレッドで処理をおこなっても安全性が保証されるというお話である.これは当然で,例えばクラス内で private final で宣言され,setter メソッド (変数値を変更するメソッドの通称)が存在しないならば安全である (オーバーライドされるなど例外は存在するが).これを "Immutable (不変な)" 状態と呼ぶ.

synchronizede をうまくつければ安全性が向上するが,プログラムの処理パフォーマンスを落としてしまう.そこで,そもそもクラスを Immutable に作っておけばパフォーマンスを落とさずにマルチスレッド処理をできる.安易に synchronized を使わず,工夫をこらして堅牢なクラスを作れということか.マルチスレッドプログラミングの勉強はそれ以外の範囲でも役に立つと聞いていたけれど,こういうクラスの作り方の工夫などは正にそれだと思う.

スレッドの名称

本書に乗っていた Thread クラスをオーバーロードした例題プログラムのコンストラクタ内で,以下のような記述を見つけた.

super ( String str );

オーバーロードした Thread クラスのコンストラクタに String 型を渡している.恥ずかしながら,これが何を意味しているか知らなかったが,どうやらスレッドに str という名前をつけるものであるようだ.
JavaTM 2 Platform Standard Ed. 5.0 "Thread"

そういえば,スレッド関係のプログラムを実行した際に,

Exception in thread "Main"

とか出てたな.