0条评论
还没有人评论过~
今天看到一个多线程问题解决了以后想再优化一下,用static代替单例获取变量:
class Test3 {
private static Test3 t;
public volatile int temp = 128;
public static synchronized Test3 getInstance(){
if(t == null){
t = new Test3();
}
return t;
}
}
改为:
class Test3 {
public static int temp = 128;
}
然后发现线程执行temp累加,
10次结果是对的
100次后找不到228,只能找到227,temp结果大致是正确的的
随着循环次数的增加重复的数字就越多,
这是为什么,
static修饰的类变量不是只有一个内存地址么,那和使用单例获取有什么区别(使用单例获取变量一切正常)
static修饰的类变量不是只有一个内存地址么,你没说错,但是你想一想 计算机是怎么做加法的。
所以你测试的时候,会循环了100次,而temp累计的值可能不够100.
volatile 关键字就不解释了,直接baidu把。
兄弟,你代码太乱了,都没心情看,这个编辑器是支持Markdown的,建议格式化一下代码。另外变量肯定是一个呀,要不就不需要考虑多线程安全了,如果每个线程都操作独自的变量,那还说个啥,所以和静态不静态没关系。