单例模式之懒汉模式(延迟加载)
来源:互联网 发布:mac照片图库照片路径 编辑:程序博客网 时间:2024/06/08 07:13
什么是延迟加载?延迟加载就是在调用get()方法时候创建,常见的方法就是在
get()中实例化。
看实现代码:
package test;public class MyObject {private static MyObject myObject;private MyObject() {}public static MyObject getInstance() {// 延迟加载if (myObject != null) {} else {myObject = new MyObject();}return myObject;}}
但是,这样方式的延迟加载,在多线程的环境中,就会出现错误,很严重的错误。根本不能保证单例模式的实现。
因为在getInstance中,如果有多个线程同时计入getInstance,那么就有可能new出多个MyObject。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
懒汉模式出现问题的解决方法:
①:将getInstance用synchronized修饰。
②:在getInstance方法中利用synchronized同步块或者lock进行同步。
③:使用DCL双检查机制。
针对第三种方法,看一段代码:
package test;public class MyObject {private volatile static MyObject myObject;private MyObject() {}// 使用双检测机制来解决问题// 即保证了不需要同步代码的异步// 又保证了单例的效果public static MyObject getInstance() {try {if (myObject != null) {} else {// 模拟在创建对象之前做一些准备性的工作Thread.sleep(3000);synchronized (MyObject.class) {if (myObject == null) {myObject = new MyObject();}}}} catch (InterruptedException e) {e.printStackTrace();}return myObject;}// 此版本的代码称为:// 双重检查Double-Check Locking}
如有哪疏漏,还请指出,共同学习!
0 0
- 单例模式之懒汉模式(延迟加载)
- 延迟加载单例模式(懒汉式)
- 懒汉式 延迟加载单例设计模式
- Java练习题-编写一个线程安全的延迟加载单例模式(懒汉模式)
- Java练习题-编写一个线程安全的延迟加载单例模式(懒汉模式)
- Java 多线程学习笔记(十一) 单例设计模式(延迟加载/懒汉模式)DCL解决线程安全问题
- 单例模式 (二) 延迟加载/"懒汉模式" —— 使用DCL双检查锁机制
- 多线程操作单例设计模式的延迟加载(懒汉式)
- J2SE学习笔记:多线程、单例模式延迟加载懒汉式同步、死锁问题
- 单例模式之懒汉模式
- 单例设计模式之懒汉模式
- 单例延迟加载模式
- 单例模式 (懒汉)
- Java设计模式之单例模式(懒汉/饿汉)
- 设计模式之单例模式(饿汉式,懒汉式)
- 设计模式之单例设计模式(懒汉式)
- 懒汉单例模式
- 单例模式(懒汉模式)
- [kuangbin带你飞]专题一 简单搜索 -F
- PL/SQL简介
- codeforces788A —— Functions again —— dp
- 杭电oj(Java版)—— 1002 A + B Problem II
- 在CSS中对背景图片进行设置相关属性
- 单例模式之懒汉模式(延迟加载)
- MySQL必知必会
- 一个对安卓日志输出功能的优化
- PAT乙级(Basic Level)练习题 >童年生活二三事
- js运动-淡入淡出
- STM8S_001_GPIO基础知识
- Python Pylint编码规范学习笔记-1
- NoSQL数据库概述
- vi编辑器