finalstatic单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了finalstatic单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)相关的知识,希望对你有一定的参考价值。

final

意思是,这个对象的值(基本类型就是值,引用类型是引用地址),不会再被改变
与线程安全的关系:final在一定程度上能使某些变量强制变得线程安全

static

意思是,这个对象是一个全局变量了,你可以在多个地方,多个线程中调用到它,而且调用的是同一个它
与线程安全的关系:一般这种的变量很容易造成线程不安全的情况

单例模式

这首先是一种特殊的需求,就是某个类的实例在JVM中只能存在一个,跟前面的static,线程安全都不一样
与线程安全的关系:实现单例需要考虑复杂的多线程的情况,这个东西需要线程安全(可以强制定义final,或使用锁,使它线程安全)

下面是单例模式的三种线程安全的实现方式

1. 在getInstance方法上加同步

public static synchronized Singleton getInstance() 
     if (single == null)   
         single = new Singleton();
       
    return single;

2. 双重检查锁定

public static Singleton getInstance() 
    if (singleton == null)   
        synchronized (Singleton.class)   
           if (singleton == null)   
              singleton = new Singleton(); 
             
          
      
    return singleton; 

3. 静态内部类

public class Singleton   
    private static class LazyHolder   
       private static final Singleton INSTANCE = new Singleton();  
      
    private Singleton ()  
    public static final Singleton getInstance()   
       return LazyHolder.INSTANCE;  
      
  

以上是关于finalstatic单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)的主要内容,如果未能解决你的问题,请参考以下文章

单例模式与多线程之间的关系总结

单例模式

转-Spring单例模式与线程安全

Spring单例模式与线程安全

1Spring单例模式与线程安全

单例模式与线程安全问题浅析