java单例模式的详细介绍

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

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都网站建设、雅安网络推广、微信平台小程序开发、雅安网络营销、雅安企业策划、雅安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供雅安建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

单例模式是最简单的一种设计模式,保证对象之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单例模式的详细介绍”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


当前标题:java单例模式的详细介绍
转载注明:http://ybzwz.com/article/pshcop.html