加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

不利用synchronized和lock,如何实现一个线程安全的单例?

发布时间:2022-05-20 08:54:48 所属栏目:安全 来源:互联网
导读:不使用synchronized和lock,如何实现一个线程安全的单例? 回答最多的是静态内部类和枚举。很好,这两种确实可以实现。 复制 public enum Singleton { INSTANCE; public void whateverMethod() { } } 1. 2. 3. 4. 5. 静态内部类 复制 public class Singleton
         不使用synchronized和lock,如何实现一个线程安全的单例?
 
         回答最多的是静态内部类和枚举。很好,这两种确实可以实现。
 
         复制
public enum Singleton {   
    INSTANCE;   
    public void whateverMethod() {   
    }   
}   
1.
2.
3.
4.
5.
静态内部类
 
复制
public class Singleton {   
    private static class SingletonHolder {   
    private static final Singleton INSTANCE = new Singleton();   
    }   
    private Singleton (){}   
    public static final Singleton getInstance() {   
    return SingletonHolder.INSTANCE;   
    }   
 
至此,我们说清楚了,各位看官的回答都是利用了ClassLoader的线程安全机制。至于为什么ClassLoader加载类是线程安全的,这里可以先直接回答:ClassLoader的loadClass方法在加载类的时候使用了synchronized关键字。也正是因为这样, 除非被重写,这个方法默认在整个装载过程中都是同步的(线程安全的)。(详情见:深度分析Java的ClassLoader机制(源码级别))
 
哈哈哈哈!!!~所以呢,这里可以说,大家的回答都只答对了一半。虽然没有显示使用synchronized和lock,但是还是间接的用到了!

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!