Java
中对于单例模式的使用涉及到方方面面。如Andoird
开发中SharePreference
工具类、图片缓存类的使用均使用到了单例模式。那么,下面来了解下Java
中的单例模式,以及如何创建使用单例模式。
介绍
单例模式属于常见的Java
23中设计模式之一,归属于设计模式的创建型模式。其基本设计思想是设计某个类只能创建一个实例,使得单进程访问提供一个统一的入口。通过百科可以了解它的定义如下:
实现
如下,提供几种线程安全的Java
单例模式的实现。
饱汉模式
private static Singleton singleton=null; //饱汉模式
//线程不安全
private static Singleton newInstance(){
if (singleton==null){
singleton=new Singleton();
}
return singleton;
}
private Singleton(){
//设置new权限
}
//线程安全
private synchronized static Singleton newInstance(){
if (singleton==null){
singleton=new Singleton();
}
return singleton;
}
饿汉模式
private static final Singleton singleton=new Singleton(); //线程安全,饿汉模式
private Singleton(){
//设置new权限
}
public static Singleton newInstance(){
return singleton;
}
懒汉模式
/**
* volatile 线程安全,具有可见性,但不具有原子性(synchronized 具有可见性和原子性)
*/
private static volatile Singleton singleton=null;
private Singleton(){
//设置new权限
}
/**
* 单例获取
* @return
* 线程安全
*/
public /**synchronized **/static Singleton newInstance(){
if (singleton==null){
//线程不安全
// singleton=new Singleton(); //非原子操作,包括多个数据域的赋值
synchronized (Singleton.class){
singleton=new Singleton();
}
}
return singleton;
}
Enum模式
public enum Test{
INSTANCE;
public void test(){
......
//method body
......
}
}