单例模式应该是最好理解的模式了,他保证一个类在全局只有一个实例,并且提供一个全局访问该实例的方法。对于线程池,日志这种就需要使用单例了,单例有两种实现方法,懒汉式和饿汉式,JVM中使用的是懒汉式,即需要的时候才进行创建。懒汉式创建单例的方法如下:
public class Singleton{
//使用volatile避免指令重排
private volatile static Singleton singleton;
private Singleton(){
}
public static Singleton getInstance(){
if(null == singleton){
//使用synchronize只同步代码块,来达到最优的创建效果,因为这段创建代码只会执行一次
synchronize(Singleton.class){
if(null == singleton){
singleton = new Singleton;
}
}
}
return singleton;
}
}
对于饿汉模式,只要在生成类的时候把实例创建出来就好了,需要使用的时候直接返回就好了:
public class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
很简单吧。