title: 【学习之路】设计模式(单列模式)
draft: true
tags:
- 学习之路
- 设计模式
categories: - 设计模式
- 创建型模式
cover: ‘https://cdn.jsdelivr.net/gh/CodeZixuan/Blog_Images/设计模式/单列模式/bg.jpg‘
description: 单列模式学习,如何写一个线程安全的单列
abbrlink: bfb5dc4e
date: 2021-03-27 16:02:30
什么是单列模式
单列就如同名字一样,只有一个实列。全局最多只有一个实列存在,如果存在多个那么就不叫单列模式了
实现单列模式的条件
- 静态变量
- 静态方法
- 私有化构造方法
线程安全饿汉模式
public class Singleton{private static Singeton singeton = new Singeton;private Singleton(){}public static Singleton getInstance(){return singeton;}}
线程不安全懒汉式
public class Singleton{private static Singleton siglenton;private Singleton(){}public static Singleton getInstance(){if (siglenton == null){siglenton = new Singleton;}return siglenton;}}
加上synchronized关键字懒汉式
public class Singleton{private static Singleton siglenton;private Singleton(){}public static synchronized Singleton getInstance(){if (siglenton == null){siglenton = new Singleton();}}}
这个方法虽然线程安全但是会损失许多性能
双重检查加锁
public static Singleton{private static volatile Singleton singleton;private Singleton(){}public static Singleton getInstance(){if (singleton == null){// 在这里加只有第一次访问才会生效,如果已经有对象那么直接返回即可synchronized (Singleton.class){if (singleton == null){singleton = new Singleton;}}}return singleton}}
使用volatile禁止指令重排序
synchronized当第一次访问的时候才会加锁
