title: 【学习之路】设计模式(单列模式)
draft: true
tags:


什么是单列模式

单列就如同名字一样,只有一个实列。全局最多只有一个实列存在,如果存在多个那么就不叫单列模式了

实现单列模式的条件

  1. 静态变量
  2. 静态方法
  3. 私有化构造方法

线程安全饿汉模式

  1. public class Singleton{
  2. private static Singeton singeton = new Singeton;
  3. private Singleton(){}
  4. public static Singleton getInstance(){
  5. return singeton;
  6. }
  7. }

线程不安全懒汉式

  1. public class Singleton{
  2. private static Singleton siglenton;
  3. private Singleton(){}
  4. public static Singleton getInstance(){
  5. if (siglenton == null){
  6. siglenton = new Singleton;
  7. }
  8. return siglenton;
  9. }
  10. }

加上synchronized关键字懒汉式

  1. public class Singleton{
  2. private static Singleton siglenton;
  3. private Singleton(){}
  4. public static synchronized Singleton getInstance(){
  5. if (siglenton == null){
  6. siglenton = new Singleton();
  7. }
  8. }
  9. }

这个方法虽然线程安全但是会损失许多性能

双重检查加锁

  1. public static Singleton{
  2. private static volatile Singleton singleton;
  3. private Singleton(){}
  4. public static Singleton getInstance(){
  5. if (singleton == null){
  6. // 在这里加只有第一次访问才会生效,如果已经有对象那么直接返回即可
  7. synchronized (Singleton.class){
  8. if (singleton == null){
  9. singleton = new Singleton;
  10. }
  11. }
  12. }
  13. return singleton
  14. }
  15. }

使用volatile禁止指令重排序

synchronized当第一次访问的时候才会加锁