单例模式
2018-03-20 10:28
95 查看
单例模式也就是指的是一个类只能有一个实例对象,不需要用户创建,由他本身自己创建,给用户提供方法进行获取。
1、构造方法私有,用户无法创建。
2、类中有一个该类静态私有对象
3、为用户提供方法获取这个对象
1、懒汉式,线程不安全
静态对象为null,需要时进行判断,然后创建
2、懒汉式,线程安全
3、饿汉式,线程安全
静态对象直接创建
4、双检锁,线程安全
避免了每次线程同步所花费的时间,提高了效率,只在第一次时进行线程同步,创建对象
为什么要加volatile关键字
https://www.cnblogs.com/doit8791/p/5308724.html
1、构造方法私有,用户无法创建。
2、类中有一个该类静态私有对象
3、为用户提供方法获取这个对象
1、懒汉式,线程不安全
静态对象为null,需要时进行判断,然后创建
/** * 懒汉式。线程不安全 * */ public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
2、懒汉式,线程安全
/** * 懒汉式。线程安全 * 若多个线程同时执行get方法,同时进行if判断,则判断成功,创建多个对象,线程不安全 * */ public class Singleton { private static Singleton instance; private Singleton() { } public static synchronized Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
3、饿汉式,线程安全
静态对象直接创建
/** * 饿汉式。线程安全 * */ public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance(){ return instance; } }
4、双检锁,线程安全
避免了每次线程同步所花费的时间,提高了效率,只在第一次时进行线程同步,创建对象
/** * 双重锁。线程安全 * */ public class Singleton { private volatile static Singleton instance; private Singleton() { } public static Singleton getInstance(){ if(instance == null){ synchronized (Singleton.class) { if(instance == null){ instance = new Singleton(); } } } return instance; } }
为什么要加volatile关键字
https://www.cnblogs.com/doit8791/p/5308724.html
相关文章推荐
- 对代理模式与Java动态代理类的理解
- 设计模式--桥接模式
- 安卓训练-开始-添加操作栏-覆盖模式的操作栏
- CentOS 7 / RHEL 7 运行单用户模式进行root的密码重置
- 以Attention Model为例谈谈两种研究创新模式
- GOF 设计模式总结
- html5对IE浏览器工作模式的表现
- 设计模式C++实现(1)——工厂模式
- A/A模式HA
- 多例模式
- vmware中nat模式上网
- 设计模式重思考一
- Google Maps带来的新型WebGIS设计模式
- Observer Pattern(观察者模式)及其在C#中的实现
- thinkPHP 由生成模式变为开发模式
- 白话设计模式之--装饰器模式
- Android activity的startActivityForResult和onActivityResult与启动模式的关系
- 【深入】java 单例模式
- Java中的24种设计模式与7大原则
- 设计模式学习笔记--传输对象模式