0

私は持っている:

public class UTIL{
  public static void met(){
    do_something(){
       print(A.m()); 
    }
  }
}
public class A{
  public  <type> m;
  public <type>static m(){
    return m;
  }
}

今:

Thread Aクラスのインスタンスを含むA

Thread Bクラスのインスタンスを含むA

スレッド B から、ある時点で UTIL.met が呼び出されます。

質問: UTIL.met が呼び出されると、Thread Bmのインスタンスから使用されますか?A

4

3 に答える 3

3

UTIL.met呼び出された場合、 in Threadm のインスタンスからAB使用しますか?

いいえ、スレッド A に 1 つのインスタンスがあり、スレッド B に別のインスタンスがあるかどうかは問題ではありません。A.m静的で、すべてのインスタンスに共通です。

しかし、変数が静的である場合、両方のスレッドが同じ変数を使用することは間違いありません。

(つまり、適切な同期がないと、厄介な競合状態が発生します。)

于 2012-07-18T09:15:32.633 に答える
1

mクラス変数なので、実際にはすべてのインスタンスに共通です。

UTIL.met()のすべてのインスタンスで、「開催中」の同じインスタンスを使用しますm[または、より適切な用語ではアクセスできます...] A

于 2012-07-18T09:15:24.883 に答える
1

m は A の静的変数として定義されます。したがって、A のすべてのインスタンス間で共通/共有されます。一方、m が静的でない場合、もちろん各インスタンスには独自のコピーがあります。

スレッド A とスレッド B にはそれぞれクラス A の独自のインスタンスが含まれているため、各スレッドは A のインスタンスを使用します。

それはあなたが達成したいことですか、それともインスタンス間で m を共有したかったですか??

于 2012-07-18T09:21:02.113 に答える