双重检查锁定与延迟初始化
来源:互联网 发布:幼儿美工室活动记录 编辑:程序博客网 时间:2024/05/19 05:02
延迟初始化的作用:
降低初始化类和创建对象的开销,按需分配创建。
常用方法:
懒汉模式--采用双重检查锁定(Doubled-Checked Locking)。避免使用锁机制,能够降低并发开销。
public class DoubleCheckedLocking{ private static iInstance instance; public static Instance getInstance(){ if(instance==null)//这里instance读取到不为null,但instance引用的对象可能还没有初始化完成 synchronized(DoubleCheckedLocking.Class){ if(instance==null) instance=new Instance();//问题根源(*) } return instance; }}
(*)的代码可以分为三行代码:
1、memory=allocate():分配内存;
2、ctorInstance(memory):初始化对象;
3、instance=memory:设置instance指向刚分配的地址。
上面2、3步骤在OS中将被重排序以优化程序执行性能,在单线程情况下,这种排序并没有改变执行结果。
问题:
但是在并发条件下,另一线程B判断instance!=null,但此时这个对象还没有被A线程初始化。
解决方案:
把instance声明为volatile型
阅读全文
0 0
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 双重检查锁定与延迟初始化
- 并发编程的艺术-双重检查锁定与延迟初始化
- Java多线程并发中的双重检查锁定与延迟初始化
- 单例-双重检查锁定与延迟初始化
- 获取url并且判断里面的值
- java基础学习总结——GUI编程(二)
- Python中线程创建的两种方式
- bzoj2796 [Poi2012]Fibonacci Representation 贪心
- Intellij IDEA 快捷键整理
- 双重检查锁定与延迟初始化
- Codeforces Round #432(div.2) D题 暴力乱搞
- 编辑 UITableView 出现的错误
- Hadoop详解(七)——Hive的原理和安装配置和UDF,flume的安装和配置以及简单使用,flume+hive+Hadoop进行日志处理
- java基础学习总结——线程(一)
- Virtualbox安装Linux虚拟机
- ROS nodelet初探
- SSL与TLS的区别
- Spring事务管理与传播机制详解以及使用实例