标签:Head null Singleton private 实例 static 单例 singleton 设计模式
单例设计模式:确保一类只有一个实例,并提供一个全局访问点。
应用场景: 线程池、缓存、日志对象、注册表设置等
多线程下同步全局实例获取的方法
public class Singleton{
private static Singleton singleton = null;
private Singleton(){}
// synchronized修饰该方法虽然让各个线程互斥的访问此方法解决多线程下线程不安全的问题但是来带来了性能上的问题
// 真正需要同步的只有第一次创建实例的时候
private static synchronized Singleton getInstance(){
singleton = new Singleton();
return singleton;
}
}
多线程下懒加载模式的优化
双重检查锁的单例模式,首先检查实例是否创建如果未创建,才进行同步,这样一来只有真正创建单例的时候才会进行同步操作。
public class Singleton{
private volatile static Singleton singleton = null; // volatile关键字的作用 1.保证变量可见性 2.保证变量有序性
private Singleton(){}
private static Singleton getInstance(){
if(singleton == null){ // 第一次判空,检查实例是否存在如果不存在再进入同步块
synchronized(Singleton.class){
if(singleton == null){ // 第二次判空,检查实例是否存在,如果仍然为null,则创建实例
singleton = new Singleton();
}
}
}
return Singleton;
}
}
标签:Head,null,Singleton,private,实例,static,单例,singleton,设计模式 来源: https://www.cnblogs.com/openmind-ink/p/15232133.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。