Hans Dev

  1. 首页
  2. 2017年11月

双重校验锁被广泛用作一种多线程环境中高效的懒加载实现。然而,当在Java中被以平台无关的形式实现时,在没有额外的同步措施的情况下,它将是不可靠的。当它在其他语言如C++中被实现时,它的可靠与否取决于处理器的内存模型,编译器进行的指令重排序以及编译器与同步库的交互。由于以上几点都未在语言规范中被明确定义(如C++),我们无法确定双重校验锁在什么情况下有效。在C++中,可以使用显式的内存屏障来使双重校验锁正确工作,但是这些屏障在Java中并不可用。

四种线程池:

Worker内部类: