单列模式:确保一个类只有一个实例,并提供一个全部访问点。单例模式主要应用于线程池、缓存中。单例模式主要有两种:懒汉模式和饿汉模式:
饿汉模式:
public class Singleton { private static Singleton singleton=new Singleton(); private Singleton(){} public static Singleton getInstance(){ return singleton; } }懒汉模式:
public class SluSigleton { private static SluSigleton singleton=null; private SluSigleton(){} public static SluSigleton getInstance(){ if(null == singleton){ singleton=new SluSigleton(); } return singleton; } }上面的代码会有问题,并不能保证一定只有一个实例,需要改进
public class SluSigleton { private static SluSigleton singleton=null; private SluSigleton(){} /** * 多线程时,由于资源竞争,会导致创建多个实例,所以需要加锁 * 这样会造成一定的负担,每次请求都要同步 * @return */ public static synchronized SluSigleton getInstance(){ if(null == singleton){ singleton=new SluSigleton(); } return singleton; } }但是上面的代码会造成效率下降,可以对其进行改进
public class LockSigleton { private volatile static LockSigleton sigleton; private LockSigleton(){} public static LockSigleton getInstance(){ if(null == sigleton){ synchronized (LockSigleton.class) { if(null == sigleton){ sigleton=new LockSigleton(); } } } return sigleton; } }这个做法可以大大缩减getInstance()的时间。这个做法需要JDK在1.4以上。