[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 10822] Re: DecimalFormat とか もスレッドセーフではない?
村山@netgeneです.
#村山@ダイヤルアップの方がいいかな?(^^;
#相変わらず貧乏くさいアナクロ野郎です.
> 先日の読書会で、
> SimpleDataFormat#parse()/format()がスレッドセーフではない
> ということを聞きました(第2回ネタですが)。
> で、その他のjava.textのフォーマットクラスはどうなのでしょう?
> #DecimalFormatもスレッドセーフではない?
ちょっとマニュアルを見た限り他も同様のようです.
----------------------
java.text.DecimalFormat
同期
decimal フォーマットは同期化されません。スレッドごとに別の
フォーマットインスタンスを作成することをお勧めします。複数の
スレッドがフォーマットに同時にアクセスする場合は、外部的に
同期化する必要があります。
-----------
java.text.MessageFormat
同期
メッセージフォーマットは同期化されません。スレッドごとに別の
フォーマットインスタンスを作成することをお勧めします。複数の
スレッドがフォーマットに同時にアクセスする場合は、外部的に
同期化する必要があります。
----------------------
いずれにせよ,「同期」で検索かければ分かるはずです.
ちなみに,以前もこのMLでネタにしたことがあると思いますが,
一般論としてマルチスレッド環境下では,いわゆるスレッド
セーフなクラスは使い物にならない場合がほとんどです.
「不変オブジェクト」のような一部の例外を除くほとんどの
場合において
「スレッドセーフ = 厳重注意/原則として使用不可」
と考えておいた方が無難です.
その最たる物がVector/Hashtableですね.
> 解決策として、以下のような対処があるようでした。
> ・synchronizedやThreadLocalを使う
> ・独自のDataFormatやその他のクラス(commons.langの
> FastDateFormatなど)を使う
上でも述べられているように,
「各スレッドごとにフォーマットインスタンスを作る」
が一番素直なんでしょう.組込み分野ででもなければインスタンス
一個のサイズなんて微々たるものです.同期にかかるコストや
リスクはこれとは比べ物になりません.
--
村山敏清 株式会社ネットジーン 〒164-0001
東京都中野区中野3-33-3 インツ中野ビル 5F
E-mail:murayama@xxxxxxxxxxxxx
TEL:(03)5328-3670 FAX:(03)5328-3673
http://www.netgene.co.jp/