标题的这两个概念相信你都听过,延时双删与双重检测锁模式。然而,由于它们的名称相似,可能导致对它们的概念混淆。现在让我们集中梳理一下这两个概念。
延时双删
用途:用于数据库缓存一致性问题时的解决方案
延时双删:先删一次缓存,再删数据库,睡眠一段时间后再删一次缓存。需要判断 B 请求删库完成时间再决定睡眠时间。
双重检测锁模式
用途:在单例模式中,检测是否只有一个单例。
双重检验锁模式(double checked locking pattern),是一种使用同步块加锁的方法。程序员称其为双重检查锁,因为会有两次检查 instance == null,一次是在同步块外,一次是在同步块内。为什么在同步块内还要再检验一次?因为可能会有多个线程一起进入同步块外的 if,如果在同步块内不进行二次检验的话就会生成多个实例了。
这两个概念容易混淆的原因是它们的名字和实现方式相似,都是通过两次检查共享变量的方式来提高性能。然而,延时双删模式是一种懒加载的优化技术,适用于只有在需要时才初始化的场景,而双重检测锁模式则是一种延时初始化的优化技术,适用于需要在多线程环境下保证单例对象创建的场景。