单例模式几种实现
2017-11-08 09:55
176 查看
1.单线程模式下,推荐懒加载
2.上述1演示,线程不安全,最容易想到的变为线程安全的方式就是加关键字synchronized
3.“双重检查锁”(Double Check Lock,简称DCL)
4.由于指令重排,上述3,仍然可能不安全,volatile关键字可以解决此问题
5.饿汉模式
public class Singleton1 { private static Singleton1 singleton = null; private Singleton1() { } public static Singleton1 getInstance() { if (singleton == null) { singleton = new Singleton1(); } return singleton; } }
2.上述1演示,线程不安全,最容易想到的变为线程安全的方式就是加关键字synchronized
public class Singleton1_1 { private static Singleton1_1 singleton = null; private Singleton1_1() { } public synchronized static Singleton1_1 getInstance() { if (singleton == null) { singleton = new Singleton1_1(); } return singleton; } }
3.“双重检查锁”(Double Check Lock,简称DCL)
public class Singleton1_2 { private static Singleton1_2 singleton = null; private Singleton1_2() { } public static Singleton1_2 getInstance() { if (singleton == null) { synchronized (Singleton1_2.class) { if (singleton == null) { singleton = new Singleton1_2(); } } } return singleton; } }
4.由于指令重排,上述3,仍然可能不安全,volatile关键字可以解决此问题
public class Singleton1_3 { private static volatile Singleton1_3 singleton = null; private Singleton1_3() { } public static Singleton1_3 getInstance() { if (singleton == null) { synchronized (Singleton1_3.class) { if (singleton == null) { singleton = new Singleton1_3(); } } } return singleton; } }
5.饿汉模式
public class Singleton2 { private static final Singleton2 singleton = new Singleton2(); private Singleton2() { } public static Singleton2 getInstance() { return singleton; } }
相关文章推荐
- J2EE中几种业务代理模式的实现和比较
- 从“假如有以下几种价格10,20,50,请你代码实现将他们排序输出”看设计模式中的策略模式
- java中几种常用的设计模式及其实现
- JAVA中单例模式的几种实现方式
- 设计模式之实现----几种工厂模式
- 单例模式的几种实现方式比较
- java 单例模式的几种实现
- 线程安全的单例模式的几种实现方法分享
- 基于Python中单例模式的几种实现方式及优化详解
- J2EE中几种业务代理模式的实现和比较-R
- 单件模式的几种实现方法
- 单例模式的几种实现对比
- Java线程安全的单例模式的几种实现
- 设计模式-PHP实现单件模式的几种方式
- Java 单例模式几种实现的差别
- C#工厂模式的几种实现方法及比较
- 单例模式的几种实现方式
- 几种设计模式在F#中的实现
- PHP实现单件模式的几种方式
- 单例模式的几种实现