赞
踩
单例模式可能是设计模式中最容易理解,应用最广泛的模式。单例模式虽然简单,但其中的坑却不少,尤其是线程安全问题。本文主要对单例的各种写法做个总结,并分析其优缺点。
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
在Java中,单例模式的实现分两种,一种称为懒汉式,一种称为饿汉式,其实就是在具体创建对象实例的处理上,有不同的实现方式。
当被问到要实现一个单例模式时,大多数人的第一反应是写出如下的代码:
/**
* 懒汉式(非线程安全)
*
* @author Ricky Fung
* @create 2016-12-13 22:37
*/
public class Singleton {
private static Singleton instance;
private Singleton(){
}
/**非线程安全*/
public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
这段代码简单明了,但是却存在致命的问题。当有多个线程并行调用 getInstance() 的时候,就会创建多个实例。也就是说在多线程下不能正常工作。
为了解决线程安全问题,最简单的方法是将整个 getInstance() 方法设为同步(synchronized),代码如下:
/**
* 懒汉式(线程安全)
*
* @author Ricky Fung
* @create 2016-12-13 22:37
*/
public class Singleton {
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。