java 中静态变量的问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 07:26:45
我在一个类中定义了一个静态变量(一个Map)并且初始化,但是我在另外两个类中分别引用这个Map,其size竟然不一样。
public class Test1 {
public static Map<Integer, String> map = new HashMap<Integer, String>();
}
public class Test2 {
public static void main(String[] args) {
new Thread() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
System.out.println(Test1.map);
} catch (Exception e) {
}
}

}
}.start();
}
}
public class Test3 {
public static int i = 0;

public static void main(String[] args) {
new Thread() {
public void run() {
while (true) {
try {
Test1.map.put(i++, "");
System.out.println(Test1.map);
Thread.sleep(500);
} catch (Exception e) {
}
}
}
}.start();
}
}
我知道肯定会有并发的问题,可是我运行了一分多钟,Test2输

你这可不是二个普通的类,二个线程啊,即便你加了sleep来控制但这只是一个粗略的手段,肯定还是会有并发性的问题。

如果你要得到正确的显示,建议你仿造生产者、消费者模式用wait()和notify()来做

最好把代码贴出来 看看

一个main方法初始化的静态变量好像不能在第二个main方法调用,若调用为null

没有赋值,默认为0

Test3里向Map里放值了,size应该大于0,而Test2里直接调用,没有放值,所以size应该是0