1、双重校验锁(JDK1.5版本之后)

public class  Singleton
{
 private volatile static Singleton singleton;
 private Singleton(){
 }
 public static Singleton getSingleton(){
  if(singleton == null){
   synchronized(Singleton.class){
    if(singleton == null){
     singleton = new Singleton();
    }
   }
  }
  return singleton;
 }
}

2、静态内部类

public class Singleton {
    private static class SingletonHolder {
 private static final Singleton INSTANCE = new Singleton();
    }
    private Singleton (){}
    public static final Singleton getInstance() {
 return SingletonHolder.INSTANCE;
    }
}