我有:
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
?
答案 0 :(得分:3)
调用
UTIL.met
时,是否会使用线程m
中A
实例中的B
?
不,如果线程A有一个实例而线程B有另一个实例则无关紧要。 A.m
是静态的,并且对所有实例都是通用的。
但绝对的情况是,如果变量是静态的,那么两个线程将使用相同的变量。
(换句话说,如果没有适当的同步,你将会遇到令人讨厌的竞争条件。)
答案 1 :(得分:1)
m
是class variable,因此对所有实例来说都是常见的。
UTIL.met()
将在m
的所有实例中使用“被保留”[或者可以访问的A
的同一个实例... [/ 1}}。
答案 2 :(得分:1)
m被定义为A中的静态变量。因此它将在A的所有实例之间共同/共享。 另一方面,如果m不是静态的,那么每个实例当然都有自己的副本。
因为线程A和线程B都包含自己的A类实例,所以每个线程都将使用它的A实例。
是你想要实现的,或者你想在实例之间共享?