锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Java单例模式的9种实现方式

时间:2023-06-29 11:07:00 dcl光伏电抗器三相功率电感器

文章目录

  • Java9种实现单例模式的方法
        • 一.饿汉式
        • 二.懒汉式,线程不安全
        • 三.懒汉式,线程安全
        • 四.双检/双检锁(DCL,即 double-checked locking)
        • 五.静态内部类
        • 六.枚举
        • 七.双检锁/双检锁(DCL,即 double-checked locking)(加volatile)
        • 八.使用ThreadLocal实现单例
        • 九.使用CAS锁实现单例
  • 我的学习论坛

Java9种实现单例模式的方法

一.饿汉式

public class Singleton { 
               private static Singleton instance = new Singleton();       private Singleton (){ 
        }       public static Singleton getInstance() { 
               return instance;       }   } 

JDK中,java.lang.Runtime使用饿汉单例模式是典型的

二.懒汉式,线程不安全

public class Singleton { 
               private static Singleton instance;       private Singleton (){ 
        }          public static Singleton getInstance() { 
               if (instance == null) { 
                   instance = new Singleton();       }       return instance;       }   } 

三.懒汉式,线程安全

public class Singleton { 
               private static Singleton instance;       private Singleton (){ 
        }  
    public static synchronized Singleton getInstance() { 
          
    if (instance == null) { 
          
        instance = new Singleton();  
    }  
    return instance;  
    }  
}

四.双检锁/双重校验锁(DCL,即 double-checked locking)

JDK 版本: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;  
    }  
}

五.静态内部类

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

六.枚举

JDK 版本:JDK1.5 起

public enum Singleton { 
          
    INSTANCE;  
    public void whateverMethod() { 
          
    }  
}

七.双检锁/双重校验锁(DCL,即 double-checked locking)(加volatile)

JDK 版本:JDK1.5 起

public class Singleton { 
          
	# 使用volatile设置内存屏障,确保线程访问资源可见性。
    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;  
    }  
}

八.使用ThreadLocal实现单例

public class Singleton { 
          
	// 用空间换时间
	private static final ThreadLocal<Singleton> tl = new ThreadLocal<Singleton>();
    @Override
    protected Singleton initialValue() { 
        
        return new Singleton();
    }

    private Singleton() { 
        }

    public static Singleton getInstance() { 
        
        return tl.get();
    }
}

九.使用CAS锁实现单例

private static final AtomicReference<Singleton> INSTANCE = new AtomicReference<Singleton>();

    private Singleton() { 
        
    }

    public static final Singleton getInstance() { 
        
        for (; ; ) { 
        
            Singleton current = INSTANCE.get();
            if (current != null) { 
        
                return current;
            }

            current = new Singleton();
            if (INSTANCE.compareAndSet(null, current)) { 
        
                return current;
            }
        }
    }

我的学习论坛

HandsomeForum:用Java编写的学习论坛,打造我们自己的圈子!(http://huangjunjie.vip:66)
文章链接:http://huangjunjie.vip:66/blog/read/8xb2zexvrhiii3anpq

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章