双重检查锁,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;
    }
后记:去翻了下书,发现还有好多书要去看,好多知识去补。。。。从今天起,停止微博,人人一个月