比如单例模式中的懒汉模式,如果有多线程的话,就会创建两个不一样的实例
------解决思路----------------------
懒汉模式中线程不安全指的是多个线程来读取这个static变量时,会使得这个static指向的实例对象发生改变,而不是static变量本身创建了多次。在Java中,static变量在JVM中只有一份拷贝,只分配一次内存。
举个例子:
A线程在调用单例的懒汉模式时,因为static变量指向为null,所以会去创建该类的一个实例a,然后让static指向它;但如果不是线程安全的,这时候B线程如果也来调用,A的操作此时没有结束,static变量判断还是null,那么B会去创建该类的另一个实例b,因此实际上该类的实例在JVM中就会有2个,不符合单例模式的规定。但这个static变量在JVM中还是只有一份拷贝,只分配一个内存,至于指向的是a,还是b,要看A、B两个线程的推进顺序。
------解决思路----------------------
static变量都是一个。至于懒汉模式是由于多线程导致new出来了两个(或多个)不同的实例,由于出现多个,静态变量引用只是指向不同的实例,static变量的空间还是在原来那里,只是引用值变了。
而且感觉楼主对懒汉模式有些误解,单例就是要求只能new出一个对象,所有线程getInstance只能得到同一个对象。而懒汉模式的线程不安全会导致new出多个对象,使得不同线程拿到不同的对象引用,故违背了单例的要求。