本篇内容主要讲解“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; } }
首先加上类锁,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单例模式的详细介绍”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!