单例模式设计
1.Java_第一季_JAVASE_自增、单例模式、类与实例初始化过程、方法参数传递机制、递归和迭代、成员变量与局部变量2.Java_第一季_SSM_Spring Bean的作用域、Spring事务的传播行为、Spring MVC的执行流程、3.Java_第一季_java高级_Redis持久化、MySql何时建立索引4.java_JUC、volatile5.java_CAS6.java_阻塞队列(FIFO先进先出)7.JUC下countDownLatch、CyclicBarrier、Semaphore以及枚举的常见使用方法8.java_锁9.java_集合不安全10.Spring循环依赖11.AbstractQueuedSynchronizer---AQS12.LockSuport13.java_线程池7大参数_底层运行原理14.java_线程池三个常用方式15.Java_Callable<V>的基本使用16.java_锁_synchronized与Lock的区别17.java_强、软、弱、虚四大引用18.java_OOM19.JAVA-interview20.java_NIO21.java_JVM之GC22.java_JVM
23.单例模式设计
24.netty服务端、客户端简单搭建25.java使用webSocket与前端通讯26.java串口通讯27.用Java读取文件文字并语音播报28.Proguard-混淆29.Spring Security30.MQ31.spring相关面试题32.执行jar包33.Spring34.SpringBoot数据访问35.Java Stream(流)基本使用36.java集合工具类 Collections基本使用37.LocalDateTime、LocalDate、Date、String相互转化38.java8新特性39.java设计模式40.java springboot使用定时器41.MQ根据正常队列、死信队列来实现延迟队列的场景1、饿汉式
/** * 饿汉式:直接创建对象,不管你是否需要,都会创建这个对象; * * 1、构造器私有化 * 2、自动创建,并且用静态保存 * 3、向外提供这个实例 * 4、强调这是一个单利模式,可以用final修饰 */ public class Singleton1 { private Singleton1(){ } public static final Singleton1 INSTANCE = new Singleton1(); }
2、枚举
/** * 枚举类型:表示该类型的对象是有限的几个, * 我们定义成一个,就成了单利模式 */ public enum Singleton2 { INSTANCE }
3、适用于初始化比较复杂的实例
/** * 适用于初始化比较复杂的实例; */ public class Singleton3 { public static final Singleton3 INSTANCE; private Singleton3(){ } static { //此处初始化其他数据; INSTANCE = new Singleton3(); } }
4、懒汉式
/** * 懒汉式:延迟创建这个实例对象; * * 1、构造器私有化 * 2、用一个静态变量保存这个唯一的实例; * 3、提供一个静态方法,获取这个实例; */ public class Singleton4 { private static Singleton4 instance; private Singleton4(){ } public static Singleton4 getInstance(){ if (instance == null){ //Thread.sleep(100);此处睡眠,若两个线程同时进入,会创建两个对象 instance = new Singleton4(); } return instance; } }
/** * 懒汉式:延迟创建这个实例对象; * * 1、构造器私有化 * 2、用一个静态变量保存这个唯一的实例; * 3、提供一个静态方法,获取这个实例; */ public class Singleton5 { private static Singleton5 instance; private Singleton5(){ } public static Singleton5 getInstance(){ synchronized (Singleton5.class){ if (instance == null){ try { //此处睡眠,若两个线程同时进入,会创建两个对象 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } instance = new Singleton5(); } } return instance; } }
5、内部类的方式
//在内部类加载的时候才会创建对象INSTANCE //静态内部类不会自动随着外部类的加载和初始化而初始化,他是单独去加载和初始化的; public class Singleton6 { private Singleton6(){ } private static class Inner{//内部类 private static final Singleton6 INSTANCE = new Singleton6(); } public static Singleton6 getInstance(){ return Inner.INSTANCE; } }
6、双端检索机制(DCL)
public class SingletonDemo2 { public static volatile SingletonDemo2 instance = null; private SingletonDemo2(){ System.out.println("SingletonDemo2"); } //DCL(双端检索机制) public static SingletonDemo2 getInstance(){//由于指令重排机制,不一定100%线程安全 if (instance == null){ synchronized (SingletonDemo2.class){ if (instance == null){ instance = new SingletonDemo2(); } } } return instance; } public static void main(String[] args) { for (int i = 0; i < 1000; i++) { new Thread(() ->{ getInstance(); },String.valueOf(i)).start(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?