单例对象能保证在一个JVM中,该对象只有一个实例存在
单例模式分为懒汉式和饿汉式
一、懒汉式
只有当第一次调用创建对象的方法时才会创建对象
public class Singleton {
private static Singleton singleton = null;
//限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
但上述代码是线程不安全的,可以选择使用synchronized关键字修饰getSingleton()方法,更优化的代码如下:
public class Singleton {
private static Singleton singleton = null;
//限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static synchronized Singleton getSingleton(){
if(singleton==null) {
return new Singleton();
} else {
return singleton;
}
}
}
类的加载过程是线程互斥的。这样当我们第一次调用getInstance的时候,JVM能够帮我们保证instance只被创建一次,并且会保证把赋值给instance的内存初始化完毕
二、饿汉式
在类加载时就将对象创建好
public class Singleton {
private static final Singleton singleton = new Singleton();
//限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton(){
return singleton;
}
//类中其他方法,尽量是static
public static void doSomething(){
}
}