温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java单例模式的详细介绍

发布时间:2021-08-31 15:54:08 来源:亿速云 阅读:140 作者:chen 栏目:编程语言

本篇内容主要讲解“java单例模式的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java单例模式的详细介绍”吧!

单例模式是最简单的一种设计模式,保证对象之new一次,大家都调用同一个对象,保证资源不浪费。面试中也经常出现。老生常谈了。 最常见的有两种:

懒汉式

懒的一匹,你调我时我再创建对象给你用

public Singleton{
	//首先构造方法要私有,杜绝外部通过new对象
	private Singleton(){}
	//定义私有内部对象
	private static Singleton s = null;
	//获取唯一对象的方法,如果并发则会new多个,所以加锁
	public static synchronized Singleton getInstance(){
		//没有就new
		if(s==null){
			s=new Singleton();
		}
		return s;
	}
}

饿汉式

饿的一匹,你先把对象搞出来,急着吃。那就先new呗

public Singleton{
	//首先构造方法要私有,杜绝外部通过new对象
	private Singleton(){}
	//先new出来再说,并且不能变呦
	private static final Singleton s = new Singleton();
	//获取唯一对象的方法
	public static Singleton getInstance(){
		return s;
	}
}

DCL(双锁检测)单例

首先加上类锁,instance变量要加上volatile关键字,防止重排序(JVM优化机制),还没初始化完成就完成对象引用的赋值,A线程分配未初始化的对象,B线程直接取,然而并未初始化,之后A线程才将对象初始化

public class Singleton{
  private volatile static Singleton instance;
  public static Singleton getInstance(){
	  // 先判断是否已创建对象,若无,才考虑加锁
    if(instance == null){
	  synchronized(Singleton.class){
		  // 加锁后再次判断,防止并发已经生成对象,故volatile修饰
	    if(instance == null){
		  instance = new Singleton();
		}
		return instance;
	  }
	}
  }
}

静态内部类

枚举

实际使用:

单例模式在spring中的beanFactory有用到,当配置scope为singleton时,spring创建单例的bean,生命周期由spring进行管理

到此,相信大家对“java单例模式的详细介绍”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI