您现在的位置是:首页 > 文章详情

单例模式实现

日期:2018-07-31点击:509

1. 单线程可用

public class Singleton { private static Singleton singleton; private Singleton() { } public static Singleton getInstance() { if (null == singleton) { singleton = new Singleton(); } return singleton; } } 

2. 使用final常量

public class Singleton { private static final Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; } } 

3. 加锁构造

public class Singleton { private static Singleton singleton; private static final Lock LOCK = new ReentrantLock(); private Singleton() { } public static Singleton getInstance() { if (null == singleton) { LOCK.lock(); if (null == singleton) { singleton = new Singleton(); } LOCK.unlock(); } return singleton; } } 

4. 方法级加锁

public class Singleton { private static Singleton singleton; private Singleton() { } public static Singleton getInstance() { if (null == singleton) { init(); } return singleton; } private static synchronized void init(){ if(null == singleton){ singleton = new Singleton(); } } } 

5. 静态内部类实现,多线程可用

public class Singleton { private Singleton() { } public static Singleton getInstance() { return Container.singleton; } private static class Container { private static Singleton singleton = new Singleton(); } } 

6. 拒绝强行反射创建我

public class Singleton { private Singleton() { if (null != Container.singleton) { throw new UnsupportedOperationException(); // 报错啦 } } public static Singleton getInstance() { return Container.singleton; } private static class Container { private static Singleton singleton = new Singleton(); } }
原文链接:https://yq.aliyun.com/articles/621029
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章