fuzhengwei / itstack-demo-design

:art: 《重学Java设计模式》是一本互联网真实案例实践书籍。以落地解决方案为核心,从实际业务中抽离出,交易、营销、秒杀、中间件、源码等22个真实场景,来学习设计模式的运用。欢迎关注小傅哥,微信(fustack),公众号:bugstack虫洞栈,博客:https://bugstack.cn
https://bugstack.cn
Apache License 2.0
6.42k stars 1.91k forks source link

你好,想问一下关于 Singleton_06 的问题 #44

Closed playHing closed 3 years ago

playHing commented 3 years ago
    public static final Singleton_06 getInstance() {
        for (; ; ) {
            Singleton_06 instance = INSTANCE.get();
            if (null != instance) return instance;
            INSTANCE.compareAndSet(null, new Singleton_06());
            return INSTANCE.get();
        }
    }

你好,想问一下这里的 for (; ; ) 有什么用哇,应该第一次循环就会 return INSTANCE.get(); 的?

fuzhengwei commented 3 years ago
  1. for (; ; ) 是一种自旋操作
  2. 在多线程竞争的情况下,并不一定某个线程先获得实例化的权限,而所有线程都需要获得实例化结果