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被调用时,它会从Threadm 的实例中AB使用吗?

不,线程 A 有一个实例而线程 B 有另一个实例并不重要。A.m是静态的并且对于所有实例都是通用的。

但是如果变量是静态的,那么两个线程将使用相同的变量,这是肯定的。

(换句话说,如果没有适当的同步,您将遇到令人讨厌的竞争条件。)

于 2012-07-18T09:15:32.633 回答
1

m是一个类变量,所以 is 实际上对所有实例都是通用的。

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 回答