最全的单例模式实现及各实现方式比较
单例模式算是 设计模式 中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 1 2 3 4 5 6 7 8 9 10 11 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null ) { instance = new Singleton(); } return instance; } } 这段代码简单明了,而且使用了懒加载模式,但是却存在致命的问题。当有多个线程并行调用 getInstance() 的时候,就会创建多个实例。也就是说在多线程下不能正常工作。 懒汉式,线程安全 为了解决上面的问题,最简单的方法是将整个 getInstance() 方法设为同步(synchronized)。 1 2 3 4 5 6 public static