单例模式五种方式
饿汉式
public class Singleton{
private static final Singleton instance = new Singleton();
private Singleton() { // 防止暴力反射
if (instance != null) {
throw new RunTimeException("单例对象不能重复被创建");
}
System.out.println("new Singleton...");
};
public static Singleton getInstance() {
return instance;
}
public Object readResolve() { // 防止反序列化破坏单例
return instance;
}
}
饿汉枚举
public Enum Singleton{
INSTANCE;
}
懒汉式
public class Singleton {
private static final Singleton instance = null;
private Singleton(){}
public static synchronized Singleton getInstance() {
if (instance != null) {
instance = new Singleton();
}
return instance;
}
}
双检索懒汉
public class Singleton {
private static final volatile Singleton instance = null;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
内部类懒汉式
public class Singleton {
private Singleton(){};
private static class Holder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance () {
return Holder.instance;
}
}
作者:万能包哥 出处:http://www.cnblogs.com/mybloger/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!