单例模式

来源:互联网 发布:mac os 系统修复 编辑:程序博客网 时间:2024/06/13 22:33
1.饿汉式
  在调用获取实例方法之前就执行了构造方法,是一种线程安全的写法。
  public class HttpIo{
     private static final HttpIo INSTANCE= new HttpIo();
     private HttpIo() { }
     public static HttpIo getInstance(){
          return INSTANCE;
     }

2.懒汉式---线程安全
   在调用static方法getInstance()获取实例时,才执行构造方法
   public class FileIo {
     private static volatile FileIo fileIo;
     private FileIo() {}
     public static FileIo getInstance() {
         if(fileIo==null) {
             synchronized (FileIo.class){
                 if(fileIo==null) {
                        fileIo=new FileIo();
                 }
             }
         }
       returnfileIo;
     }
   }
3.静态内部类----线程安全

   
public class HttpIo{

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

当执行getInstance()方法的时候就去调用HttpIoHolder内部类里面的INSTANCE实例,此时HttpIoHolder 内部类会被加载到内存里,在类加载的时候就对INSTANCE实例进行初始化。和饿汉式一个道理,保证了只有一个实例,而且在调用getInstance()方法的时候才进行INSTANCE实例的初始化,又具有懒汉式的部分特性。

参考: http://www.sohu.com/a/125784913_467808
原创粉丝点击