多线程下的两种单例写法
2016-03-22 11:07 taixuyingcai 阅读(351) 评论(0) 编辑 收藏 举报1:以volatile关键字和synchronized关键字实现
public class Sinstance { private static volatile Sinstance sinit = null; public static Sinstance getInstance() { Sinstance s = sinit; if (sinit == null) { s = sinit; if (s == null) { // 双重检测 s = new Sinstance(); sinit = s; // volatile 关键字保证了代码在被译的顺序不会被改变,从而sinit 会在s 执行完构造方法后被赋值 } } return s; } }
2:内部类方法。内部类方法可以实现延迟加载,并且线程安全是由jvm内部实现的
public class HelperHolder { public static class Helper { private static final Helper helper = new Helper(); } public static Helper getHelper() { return Helper.helper; } }