不利用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,但是还是间接的用到了! (编辑:宁德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐