前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单例模式懒汉式和饿汉式的学习

单例模式懒汉式和饿汉式的学习

原创
作者头像
逆回十六夜
修改2019-10-08 11:18:06
6060
修改2019-10-08 11:18:06
举报
文章被收录于专栏:逆回十六夜逆回十六夜

懒汉式

代码语言:javascript
复制
package singleton;

public class Singleton{
    private static Singleton instance;
    private Singleton(){}

    public static Singleton getInstance() {
        synchronized (Singleton.class)
        {
            if(instance==null)
            {
                instance = new Singleton();
            }
        }
        return instance;
    }
}
  • private Singleton(){}:定义私有的构造函数,这就可以防止外部创建该对象的实例,只有自己类内部才能创建该对象的实例。
  • synchronized(Singleton.class):锁住加载的类,让程序只能有1个类的实例,而static自然是与类的实例在一起的,有多个类实例的情况大多存在于多线程的情况下。
  • 之所以要上锁的原因在于instance为null,在多线程的情况下因为JVM的优化,可能会导致instance被传入多线程的工作内存,导致new多个对象的情况。详情请见https://cloud.tencent.com/developer/article/1464729

饿汉式

代码语言:javascript
复制
public class Singleton{
    private static Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}
  • private的情况同上
  • 因为instance不为null,本身从一开始调用Singleton的getInstance()的时候就会创建Singleton的类实例和instance的对象。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 懒汉式
  • 饿汉式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档