Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

staticメソッドについて

どうもよく分からないのですが、static変数から考えると、
スレッドA,スレッドB、メソッドAがあるとしたら、
スレッドAがメソッドAを呼び出し、処理が終わらないうちに
スレッドBがメソッドAを呼び出しても待たされる。スレッドAに値が返されたらスレッドBからの要求にこたえる。この解釈であってますか?

3

回答

89435

閲覧

3件の回答

評価

0

間違っています。

synchronized 修飾子を使っているかいないか、同期化されるクラスをフィールドとして使っているかいないか等何通りかのパターンがあり、それにより動作が異なります。

例としてあげている解釈はその内の一つのパターンです。

評価

0

メソッドAは同時に実行されます。
static変数がどのような順番でアクセスされるかは、
スレッドAとスレッドBの進行状況によります。

 static変数にIDをセット
 処理1
 処理2

というメソッドAをスレッドAとBが呼び出すと、例えば

スレッドAがstatic変数にID="A"をセットする
スレッドAの処理1(ID="A")
スレッドBがstatic変数にID="B"をセットする
スレッドBの処理1(ID="B")
スレッドBの処理2(ID="B")
スレッドAの処理2(ID="B")

なんてことになります(もっともこの場合は、IDをstaticに入れること自体がおかしいけど)。

これを防ぐのが同期です。

評価

0

あ、static変数でなくてstaticメソッドでしたか。
失礼しました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。