本文共 1080 字,大约阅读时间需要 3 分钟。
懒汉式:
public class Single { private static volatile Single instance; private Single() {} public static Single getInstance() { if (instance == null) { synchronized (Single.class) { if (instance == null) { instance = new Single(); } } } return instance; }}
解决多线程问题。大名鼎鼎的EventBus中,其入口方法EventBus.getDefault()就是用这种方法来实现的。绝对没有问题,不过,
非要挑点刺的话还是能挑出来的,就是这个写法有些复杂了,不够优雅、简洁。
饿汉式:
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; }}
《Effective Java》
这种写法非常巧妙:
1.对于内部类SingletonHolder,它是一个饿汉式的单例实现,在SingletonHolder初始化的时候会由ClassLoader来保证同步,使INSTANCE是一个真·单例。
2.同时,由于SingletonHolder是一个内部类,只在外部类的Singleton的getInstance()中被使用,所以它被加载的时机也就是在getInstance()方法第一次被调用的时候。
3.它利用了ClassLoader来保证了同步,同时又能让开发者控制类加载的时机。从内部看是一个饿汉式的单例,但是从外部看来,又的确是懒汉式的实现。
简直是神乎其技。
文章是从这里看的,不错,个人直接把好理解的完美方法粘了出来,以备使用,原理可查看原文
转载地址:http://ynzli.baihongyu.com/