《java 多线程编程核心技术》读书笔记二
来源:互联网 发布:ie11浏览器修复软件 编辑:程序博客网 时间:2024/06/05 11:44
多线程环境下的单例
饿汉模式:线程安全,在类加载的时候就初始化了,以空间换时间,占用内存
懒汉模式:非线程安全,在调用时初始化,以时间换空间,每次都需要消耗时间判断是否已初始化
懒汉模式在多线程的情况下会创建多个实例对象,其原因在于如下代码
if(obj==null){ //在实例化MyObject对象之前,如果其它线程已经执行了obj==null的判断,则会创建多个实例对象 obj = new MyObject();}
解决方法:
- 同步方法 缺点:运行效率低
- 同步代码块
- 针对重要的代码进行单独的同步并使用DCL双检查锁机制
if(obj==null){ synchronized(MyObject.class){ if(obj==null){//如果去除此处的判断语句,则仍会创建多个实例对象 obj = new MyObject(); } }}
其它可以解决多线程环境下单例模式非线程安全问题的办法:
- 使用静态内部类实现单例模式 (后续需要了解加载顺序)
- 涉及序列化和反序列化环境下需要借助readResolve()
- 使用静态代码块实现单例
- 使用枚举数据类型实现单例
阅读全文
1 0
- 《java 多线程编程核心技术》读书笔记二
- 《java多线程编程核心技术》读书笔记1
- 《java多线程编程核心技术》读书笔记2.1
- 《java 多线程编程核心技术》读书笔记一
- 《java 多线程编程核心技术》读书笔记三
- 《java 多线程编程核心技术》读书笔记四
- 《java 多线程编程核心技术》读书笔记五
- 《java 多线程编程核心技术》读书笔记六
- 读书笔记——Java多线程编程核心技术
- 《java多线程编程核心技术》核心笔记(二)
- Java多线程编程核心技术学习(二)
- 多线程编程核心技术读书笔记(一):Java多线程技能
- java多线程 Java核心技术 读书笔记
- 《java多线程编程核心技术》读书笔记2.2:volatile关键词
- 《java多线程编程核心技术》读书笔记3:线程间的通信
- 《java多线程编程核心技术》读书笔记4:Lock的使用
- 《java多线程编程核心技术》读书笔记6:线程中的异常处理
- 《java 多线程编程核心技术》读书笔记三(补充内容)
- mysql status记录
- OJ提交题目中的语言选项里G++与C++的区别
- Ubuntu14.04配置Faster-RCNN
- 利用反射调用方法,以及绕过泛型检查
- 51nod 1014 X^2ModP=A
- 《java 多线程编程核心技术》读书笔记二
- 欢迎使用CSDN-markdown编辑器
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 正则易懂版
- 块状元素行内元素和行内替换元素
- 杭电acm—1058 Humble Numbers
- java 接口(interface)
- Tensorflow深度学习之十:Tensorflow实现经典卷积神经网络AlexNet
- 相隔一段时间之后才可以执行某一事件的功能实现