java单例模式学习
来源:互联网 发布:wps表格查找重复数据 编辑:程序博客网 时间:2024/04/29 11:30
设计模式,是一种经验的总结(个人理解)形成的不具约束力的规范和实现。
由于java基础的薄弱,对单例模式不太理解,甚至现在再学还是只会学到皮毛,但是还是一点点看和学吧,等某一天了解了其深层次原理的时候才算学通了。
单例模式的目的是保证对象的唯一性,这就需要保证其他程序无法创建对象,且本类创建的对象唯一,只对外提供该类的方法。
保证第一点:构造函数私有化。
保证第二点:在本类中创建对象,且唯一。
保证第三点:提供获取对象的方法,public。
(1)只适合单线程环境
原因:多线程环境下同时判断if可能生成多个对象
public class Test {private Test(){}//私有化构造函数private static Test test=null;public static Test getInstance()//对外提供获取实例的方法{if(null==test){test=new Test();//本类中创建对象}return test;}}(2)适合多线程环境(懒汉式)
原因:getInstance()方法加了同步锁
public class Test2 {private Test2(){}//私有化构造函数private static Test2 test2=null;public static synchronized Test2 getInstance()//对外提供获取实例的方法{if(null==test2){test2=new Test2();//本类中创建对象}return test2;}}(3)两次判断,加同步锁
原因:当test3为null时才加同步锁创建实例,否则无需获取同步锁
public class Test3 {private Test3(){}//私有化构造函数private static Test3 test3=null;public static Test3 getInstance()//对外提供获取实例的方法{if(null==test3){synchronized (Test3.class) {if(null==test3){test3=new Test3();//本类中创建对象}}}return test3;}}(4)饿汉式(推荐使用)
原因:加载该类时就生成一个Test4的静态实例(使用到该类的话迟早要创建该实例),但是过早初始化该实例占用内存,达不到lazy loading的目的
public class Test4 {private Test4(){}private static Test4 test4 = new Test4();public static Test4 getInstance(){return test4;}}
(5)静态内部类(推荐)
还看得不太理解,看懂了补充。
阅读全文
0 0
- 学习:java 单例模式
- java学习--单例模式
- java单例模式学习
- Java单例模式学习
- java设计模式学习-单例模式
- java学习笔记(单例模式)
- java-单例设计模式学习
- JAVA学习九:单例设计模式
- Java之单例模式学习
- java学习07-单例设计模式
- 我学习的java单例模式
- Java学习--单例设计模式
- java学习--单例设计模式
- Java学习笔记之单例模式
- java单例模式 - 学习笔记
- Java学习笔记之单例模式
- 个人学习-java-单例设计模式
- java单例模式之学习
- 『ORACLE』 清理监听日志(11g)
- highcharts报表 三:plotOptions 针对所有图表有效的通用配置
- 第十四周:( LeetCode593) Valid Square(c++)
- 服务器端 I/O 性能:Node vs. PHP vs. Java vs. Go
- 转-【CTF环境搭建之】如何使用Android反编译软件
- java单例模式学习
- leetcode(1)
- Linux CentOS 7安装GNOME图形界面并设置默认启动方式
- Maven技术小结
- vim常用命令总结(转)
- DiskLruCache磁盘缓存
- es6中Map结构相关
- cips2016-中文信息处理发展阅读笔记
- MATLAB面向对象编程中类的默认优先级