标签:饿汉 color ola method -- 之一 zed ssh volatil
单例模式属于创建型模式,是设计模式中最简单的设计模式之一,其最大的特点是只有一个实例。当某一个类频繁被其他对象进行调用,为减少该类被频繁的创建和销毁,单例模式则派上用场。
单例模式主要处理多个线程的统一操作,比如计数器的实现、多线程对于统一文件的操作等等。但是单例模式的实现与Java设计原则中的单一职责原则相冲突。
单例模式的实现有很多种,比如饿汉模式、懒汉模式、静态内部类,甚至枚举值实现等。每种实现方式各有特点,对于线程安全和是否延迟加载也各有不同。下面分别对于其多种实现方式进行简单介绍和实现。
/**
* 单例模式--饿汉模式: 线程安全的
*/
public class SingletonDemoHungry {
private static SingletonDemoHungry instance = new SingletonDemoHungry();
private SingletonDemoHungry() {
}
public static SingletonDemoHungry getInstance(){
return instance;
}
}
/**
* 单例模式--懒汉模式: 线程安全的
*
* 双重校验锁的方法: 在多线程的情况下, 保证代码块只能被一个线程锁定
* volatile: 可以防止指令重排, 即保证在 写 操作之前,不会进行读操作
*
*/
public class SingletonDemoLazy {
private volatile static SingletonDemoLazy instance = null;
private SingletonDemoLazy() {
}
public static SingletonDemoLazy getInstance(){
if (instance == null){
synchronized (SingletonDemoLazy.class){
if (instance == null){
instance = new SingletonDemoLazy();
}
}
}
return instance;
}
}
/**
* 单例模式--静态内部类: 线程安全的
*
* 静态内部类的方式:只有在调用getInstance() 方法时才会去加载,类似于懒汉模式
* 它是线程安全的
*/
public class SingletonDemoStaticClass {
//内部类
private static class SingletonClassHolder{
private static SingletonDemoStaticClass instance = new SingletonDemoStaticClass();
}
private SingletonDemoStaticClass() {
}
//外部调用获取该类的方法时才会调用静态内部类的方法
public static SingletonDemoStaticClass getInstance(){
return SingletonClassHolder.instance;
}
}
/**
* 单例模式--枚举方法, 线程安全
*
* 外部调用它的方法直接通过 SingletonDemoEnum.INSTANCE.itsMethod() 即可
*/
public enum SingletonDemoEnum {
INSTANCE;
public void itsMethod(){
System.out.println("itsMethod has been called! ");
}
}
标签:饿汉 color ola method -- 之一 zed ssh volatil
原文地址:https://www.cnblogs.com/Demrystv/p/11948974.html