静态方法访问线程内的非静态变量

时间:2012-07-18 09:14:03

标签: java multithreading static

我有:

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时,是否会使用线程B中m的实例中的A

3 个答案:

答案 0 :(得分:3)

  

调用UTIL.met时,是否会使用线程mA 实例中的B

不,如果线程A有一个实例而线程B有另一个实例则无关紧要。 A.m是静态的,并且对所有实例都是通用的。

但绝对的情况是,如果变量是静态的,那么两个线程将使用相同的变量。

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

答案 1 :(得分:1)

mclass variable,因此对所有实例来说都是常见的。

UTIL.met()将在m的所有实例中使用“被保留”[或者可以访问的A的同一个实例... [/ 1}}。

答案 2 :(得分:1)

m被定义为A中的静态变量。因此它将在A的所有实例之间共同/共享。 另一方面,如果m不是静态的,那么每个实例当然都有自己的副本。

因为线程A和线程B都包含自己的A类实例,所以每个线程都将使用它的A实例。

是你想要实现的,或者你想在实例之间共享?