后端岗位面试题更新 2026-08-05

请解释单例模式中的双重检查锁定(double-checked locking)实现,并说明其线程安全问题。

上海银行后端开发银行风险判断技术原理Java

考察说明

考察并发单例实现的理解、原子性与可见性、以及现代Java下的正确写法

回答思路

  1. 解释双重检查锁定的基本流程:先判空、加锁、再判空、创建实例
  2. 指出旧写法在Java早期版本中的可见性问题,并解释volatile的作用
  3. 能说明现代Java(如JVM内存模型修订后)及持有者类等其他线程安全单例方案
  4. 能分析为何有时仍需考虑instance非空但未完全初始化的竞态