标签:private uniqueInstance 实例 static 模式 单例 doubleCheck
1.饿汉模式:指全局的单例实例在类装载时构建。
class HungryWay{
//在静态初始化器中创建单例实例,这段代码保证了线程安全
private static HungryWay uniqueInstance=new HungryWay();
//Singleton类只有一个构造方法并且是被private修饰的,所以用户无法通过new方法创建该对象实例
private HungryWay(){}
public static HungryWay getInstance(){
return uniqueInstance;
}
}
2.懒汉方式:指全局的单例实例在第一次被使用时构建。
“ 懒汉式” 就是说单例实例在第一次被使用时构建,而不是在JVM在加载这个类时就马上创建此唯一的单例实例。
class LazyWay{
private static LazyWay uniqueInstance;
private LazyWay(){}
//没有加入synchronized关键字的版本是线程不安全的
public static synchronized LazyWay getInstance(){
//判断当前单例是否已经存在,若存在则返回,不存在则再建立单例
if(uniqueInstance==null){
uniqueInstance=new LazyWay();
}
return uniqueInstance;
}
}
3.懒汉式(双重检查加锁版本)
class DoubleCheck{
//volatile保证,当doubleCheck变量被初始化成doubleCheck实例时,
//多个线程可以正确处理doubleCheck变量
private volatile static DoubleCheck doubleCheck;
private DoubleCheck(){}
public static DoubleCheck getInstance(){
if(doubleCheck==null){
synchronized (DoubleCheck.class){
//进入同步代码块后,再检查一次,如果仍是null,才创建实例
if(doubleCheck==null){
doubleCheck=new DoubleCheck();
}
}
}
return doubleCheck;
}
}
4.饿汉式(枚举方式)
一般推荐使用这种。
enum Singleton {
//定义一个枚举的元素,它就是 Singleton 的一个实例
INSTANCE;
public void get(){
System.out.println("枚举实现单例模式");
}
}
5.懒汉式(登记式/静态内部类方式)
静态内部实现的单例是懒加载的且线程安全。
class Singletons {
private static class SingletonHolder {
private static final Singletons INSTANCE = new Singletons();
}
private Singletons (){}
public static final Singletons getInstance() {
return SingletonHolder.INSTANCE;
}
}
看完觉得可以的小伙伴可以顺手点个赞嘛,谢谢。
标签:private,uniqueInstance,实例,static,模式,单例,doubleCheck
来源: https://blog.csdn.net/SingleNobleTH/article/details/105785983
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。