单例模式
来源:互联网 发布:私有云软件 编辑:程序博客网 时间:2024/06/05 03:07
1.线程不安全的懒汉模式
package SingletonPattern;/** * 懒汉模式,在需要的时候创建实例 * 加载类时比较快,但运行时获取对象的速度比较慢,线程不安全,只适用于单线程环境 */public class SingletonLazy {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonLazy() {}// 2.创建类的唯一实例private static SingletonLazy instance = null;// 3.提供一个用于获取实例的方法public static SingletonLazy getInstance() {if (instance==null) {instance=new SingletonLazy();}return instance;}}
2.线程安全的懒汉模式
package SingletonPattern;/** * 懒汉模式,在需要的时候创建实例 * 加载类时比较快,但运行时获取对象的速度比较慢,线程安全,适用于多线程环境 */public class SingletonLazy {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonLazy() {}// 2.创建类的唯一实例private static SingletonLazy instance = null;// 3.提供一个用于获取实例的方法public static synchronized SingletonLazy getInstance() {if (instance==null) {instance=new SingletonLazy();}return instance;}}
3.饿汉模式
package SingletonPattern;/** * 饿汉模式,加载类时创建实例,没有达到lazy loading的效果 * 加载类时比较慢,但运行时获取对象的速度比较快,线程安全 */public class SingletonHungry {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonHungry() {}// 2.创建类的唯一实例private static SingletonHungry instance = new SingletonHungry();// 3.提供一个用于获取实例的方法public static SingletonHungry getInstance() {return instance;}}
4.静态内部类
package SingletonPattern;/** * 静态内部类 * 加载时不会创建实例,达到Lazy loading的效果 * 仅在调用getInstance()获取实例时,才创建实例 */public class SingletonInternal {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonInternal() {}// 2.静态内部类,创建类的唯一实例private static class SingletonHolder {private final static SingletonInternal instance = new SingletonInternal();}// 3.提供一个用于获取实例的方法public static SingletonInternal getInstance() {return SingletonHolder.instance;}}
5.双重校验锁
package SingletonPattern;/** * 双重校验锁,在当前的内存模型中无效 */public class SingletonLock { private SingletonLock(){} private volatile static SingletonLock instance; public static SingletonLock getInstance(){ if(instance==null){ synchronized(SingletonLock.class){ if(instance==null){ instance=new SingletonLock(); } } } return instance; } }
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- centos7 快速安装 mariadb(mysql)
- Android按返回键退出程序但不销毁,程序后台运行,同QQ退出处理方式
- 知识普及:Team Leader 的职责范围
- ios 监听app从后台恢复到前台
- Git 常用命令速查
- 单例模式
- tomcat 启动 严重:Error listenerStart Remember that ordinal parameters are 1-based!
- [django]用日期来查询datetime类型字段
- MESI协议
- 15第十一周项目四——类族的设计
- Java基础之理解Annotation
- CSS3实例学习教程:data类型的Url
- thread join在子线程遇到异常的时候主线程并未感知
- 各位同学,由于大富翁系列在整理出版中,网络部分请参考出版的书稿