单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,单例模式是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,可能产生一个实例供外部访问,并且提供一个全局的访问点。
几种常用的单例模式:
一、懒汉式单例模式:
public class Singleton {
private static Singleton singleton = null;
private Singleton(){
}
public static Singleton getSingleton(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
懒汉式需要在getSingleton方法前面加synchronized关键字,也可以在方法内加synchronized关键字。解决·线程同步
java对象默认是不可以复制的,但是如果实现了cloneable接口,并实现了clone方法,则可以直接通过对象复制方式创建一个新对象,复制是不需要调用类的构造函数的。
二、饿汉式单例:
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
public static void dosomthing(){
}
}
写起来比较简单,而且不存在多线程同步问题,避免了synchronized所造成的性能问题;
三、饱汉式,线程安全实现:
public class SingletonTest {
private Singleton() {
}
private static Singleton singleton;
public static synchronized Singleton getInstance() {
if (singleton== null)
singleton= new Singleton();
return singleton;
}
}
四、优化实现
public class Singleton {
private Singleton() {
}
private static volatile Singleton instance;
public static Singleton getIstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
优点: 内存占用地,效率高,线程安全,多线程操作原子性。