- - PR -
SimpleDateFormat使用の際の同期化について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-01 09:34
インスタンスを複数スレッドで共有しなければよいだけです。
のようにするのでなく、
とすればよいだけです。 同期化で問題を回避しようとするのは方向性が間違っている気がします。 | ||||||||
|
投稿日時: 2007-06-01 10:34
一般論になりますが、パーサ系のクラスのインスタンス生成は、
他の値系のクラスのインスタンス生成に比べ比較的コストが高くなりがちで、 極力インスタンスは使いまわそうという風潮があったりします。 そこで共有すると、同期化やら色んな事を考慮しなければいけないわけですが、 結果としてインスタンス生成の方が、同期化に比べてローコストになったり、 予期しない副作用に悩まされることもあるわけで、 素直にインスタンスを都度生成するほうがよいケースもあります。 | ||||||||
|
投稿日時: 2007-06-01 10:53
SimpleDateFormatの問題はformatメソッドで受け取ったDateをインスタンス変数のcalendarにセットしているところです。そのため複数スレッドで同じインスタンスを使い回すと、別のスレッドで日付が上書きされることがあるという問題です。
同期化でも回避できますが、普通はインスタンスを作った方がコストが低いです。 そもそも親クラスのDateFormatが異なる日付でのインスタンスの使い回しを想定していないので仕方がありません。 | ||||||||
|
投稿日時: 2007-06-19 18:24
こんなのもありますよということで紹介。
org.apache.commons.lang.time.FastDateFormat http://jakarta.apache.org/commons/lang/api/org/apache/commons/lang/time/FastDateFormat.html |