本篇内容主要讲解“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单例模式的详细介绍”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/xlpapapa/blog/3006142