枚举类实现单例模式

实现单例模式时候,要思考四个问题:

  1. 是否线程安全
  2. 多线程安全了,效率是否能接受
  3. 是否可以延迟加载
  4. 是否支持序列化

请看下面一张图:

枚举实现单例模式如下:简洁优雅

public enum Singleton 0 {
INSTANCE;
int anInt;
public int getAnInt() {
return anInt;
}
public void setAnInt( int anInt ) {
this.anInt = anInt;
}
public void dosomethings( ) {
System.out.println("枚举类实现单例");
}
}

恶汉式单例模式如下:

public class Singleton 1{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}

饱汉式单例模式

public class Singleton2 {
private static Singleton2 singleton;
private Singleton2(){
}
public static synchronized Singleton2 getInstance(){
if(singleton == null)
singleton = new Singleton2();
return singleton;
}

双重锁模式(DCL):

public class Singleton3 {
private static Singleton3 singleton;
private Singleton3(){
}
public static Singleton3 getInstance(){
if(singleton == null){
synchronized(Singleton3.class){
if(singleton == null){
singleton = new Singleton3();
}
}
}
return singleton;
}

推荐博客 https://juejin.im/post/5b50b0dd6fb9a04f932ff53f

posted @   牵我狗  阅读(1166)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
· 全程使用 AI 从 0 到 1 写了个小工具
点击右上角即可分享
微信分享提示