双重检查锁,synchronized,volatile
以前看java并发编程实践的时候,大致看了下,说双重检查加锁有问题,也没有细看原因。看到邮件列表里面有这个东西,觉得synchronized会更好,
回去把书又翻了下,其实因为变量使用了volatile,已经把原来的缺陷避免了,
如果不使用volatile的话,有可能第一个线程A调用了构造函数,abc已经不为null了,但是对另一个线程可能是不可见的,看到还是abc还是null,于是就进到里面去了,就有可能导致构造了两个出来,
使用了volatile之后,第一个线程的更改对其他线程是立即可见的。也就避免了上述问题。
public class WanLiang extends AliPeople{ private String name = "test"; private volatile static WanLiang abc; private WanLiang() {} public static WanLiang getInstance() { if (abc == null) { //双重检查加锁 synchronized (WanLiang.class) { if (abc == null) { abc = new WanLiang(); } } } return wanLiang; }后记:去翻了下书,发现还有好多书要去看,好多知识去补。。。。从今天起,停止微博,人人一个月