单例模式作为23中设计模式中最基础的设计模式,一般实现方式为
①私有化构造方法
②提供一个获取对象的静态方法
除此之外,实现单例模式的方法还有很多种,这篇文章主要介绍实现单例模式的几种方法。
目录
一、懒汉式单例
二、懒汉式单例优化(双重检测锁)
三、饿汉式单例
四、静态内部类实现的饿汉式单例
五、枚举实现饿汉式单例文章来源:https://www.toymoban.com/news/detail-655076.html
一、懒汉式单例
package design.singleton;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 懒汉式单例
*/
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() { }
/**
* 普通懒汉式单例
*/
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
二、懒汉式单例优化(双重检测锁)
第一种方式的代码在多线程下存在并发问题文章来源地址https://www.toymoban.com/news/detail-655076.html
package design.singleton;
/**
* 双重检测锁的懒汉式单例
*/
public class LazySingleton {
private static volatile LazySingleton instance;
private LazySingleton() { }
/**
* 双重检测锁的懒汉单例
* @return LazySingleton
*/
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
三、饿汉式单例
package design.singleton;
/**
* 饿汉式单例
*/
public class EagerSingleton {
private static EagerSingleton instance;
static {
instance = new EagerSingleton();
}
private EagerSingleton() { }
public static EagerSingleton getInstance() {
return instance;
}
}
四、静态内部类实现的饿汉式单例
package design.singleton;
/**
* 静态内部类的懒汉式单例
* @author heyunlin
* @version 1.0
*/
public class InnerClassSingleton {
private static class StaticInnerClassSingleton {
private static StaticInnerClassSingleton singleton = new StaticInnerClassSingleton();
}
private InnerClassSingleton() {
throw new RuntimeException();
}
public static StaticInnerClassSingleton getInstance() {
return StaticInnerClassSingleton.singleton;
}
}
五、枚举实现饿汉式单例
package design.singleton;
/**
* 枚举实现的单例模式
* @author heyunlin
* @version 1.0
*/
public enum EnumSingleton {
Singleton;
}
到了这里,关于Java实现单例模式的几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!