- - PR -
Javaのクラスメソッド(static)について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-07-13 13:04
あしゅさんと同意見ですが、例えばstaticメソッドの中で、
みたいなコードを書いたとします。ぱっと見は安全っぽいですが、 getHoge()の戻り値がstaticの一意なインスタンスだったりすると、確実に競合を起こします。 しかしAPIのコードが非公開だったりすると、安全かどうか見えにくいものです。 APIによって適切なコードを書くのが重要で、 一概にstaticメソッドからstaticフィールドを参照しなきゃ安全とは言えないですね。 #例で言えばstaticフィールドを参照していますが、 #APIによって隠蔽されているケースもあって、 #単純に判断できないという話です。 | ||||
|
投稿日時: 2006-07-13 13:16
そうなんですか。 サンプルコードのように引数をいじらないで、クラス変数に気をつけてれば、 短絡的に「これはこう」でいいと思いますが。 質問のように負荷が高い状況で何かが発生するのでしょうか。 | ||||
|
投稿日時: 2006-07-13 13:52
一番最初のサンプルでは問題ありませんよ。 気になるのは、 static ⇒ 排他制御を考える 非static ⇒ 排他制御は不要 と単純に捉えてしまう人が非常に多いからです。 static/非staticの違いは、オブジェクト型ならば、参照がどこの 領域に確保されるかの違いでしかなく、実体には影響しません。 問題は、実体が複数のスレッドに共有される可能性があるのか、 という点を考えて排他制御が必要なのか、不要なのかを判断 しなければならないということです。 |