您好,登录后才能下订单哦!
本篇内容主要讲解“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; } }
首先加上类锁,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单例模式的详细介绍”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。