- PR -

staticメソッドの同時実行でメモリが破壊される?

投稿者投稿内容
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-03-03 14:06
引用:

えんぽりさんの書き込み (2007-03-02 17:38) より:
MainClsのメソッドを初回に、
別の処理より同時実行した場合、
定数TEISUは、"AbCDEF"以外の値になることはあるでしょうか?

また、本件の処理のような場合に、
staticメソッドの同時実行でメモリが破壊されることはあるのでしょうか?



引用:

えんぽりさんの書き込み (2007-03-02 18:55) より:
あるシステムにて発生した現象なのですが、
2年間、このような現象は発生しておりませんでした。
つい最近、下記の現象が発生いたしました。



私の読解力がないのかもしれませんが、何が現に起きている問題なのか
書かれていないように思うのですが気のせいでしょうか?下記の現象とは?

当初の質問に対しては、
1.staticの値をマルチスレッド下で変更する際に
特異な値を取る可能性は一応ある。
例えば、Javaの言語仕様上、double値の代入などで上位32bitと下位32bitが
混在した値になる可能性はあるとはよく言われるが、実際のJavaVMの実装で
それが起きうる実装は寡聞にして聞いたことがない。
2.staticフィールドの初期化は継承階層で巡回している場合に、
正しく行われないことがある。
相互依存関係を持つクラスの初期化は注意して行わなければならない。
というか、相互依存にしないことが望ましい。

といったところですが、汎用的な質問に対しては汎用的にしか答えられません。
ソースコードも抜粋だし、具体的な再現コードではないですし…。
(2.に関して突っ込んだ説明をするのも大変なのですよ)

「予期しない動作になりますか?」という質問に対しては非常に答えにくい。
ケースバイケースなので安直に白黒つけることができない。
そんなに簡単なら誰もマルチスレッドで悩みはしませんよ…
遠回りに思えるかもしれませんが、マルチスレッドでの問題については
書籍を読むなどして理解を深めることが一番の近道だと思います。

スキルアップ/キャリアアップ(JOB@IT)