博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于双重锁单例模式
阅读量:6478 次
发布时间:2019-06-23

本文共 1766 字,大约阅读时间需要 5 分钟。

/** * @author JHX * @date 2018/12/1 13:58 */public class SingleClass {    private static  SingleClass singleClass = null;    public static SingleClass getSingleClass() {        if (singleClass == null) {            synchronized (SingleClass.class) {                if (singleClass == null) {                    singleClass = new SingleClass();                }            }        }        return singleClass;    }}复制代码

这是双重锁单例的模式,然后写一个测试类

/** * @author JHX * @date 2018/12/1 14:00 */public class CoountDownLatchTest {    public static void main(String[] args) {        final CountDownLatch countDownLatch = new CountDownLatch(1);        ExecutorService exce = new ThreadPoolExecutor(15, 15, 20, TimeUnit.SECONDS, new ArrayBlockingQueue
(20)); for (int i = 0; i < 15; i++) { final int num = i; Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("第" + num + "开始"); try { countDownLatch.await(); System.out.println(SingleClass.getSingleClass().toString()); } catch (InterruptedException e) { e.printStackTrace(); } } }); exce.execute(thread); } try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } countDownLatch.countDown(); System.out.println("main end"); exce.shutdown(); }}复制代码

上述测试结果发现,很小概率的打印出来的地址不一样

singleClass = new SingleClass();复制代码

singleClass 类对象的 引用存在栈上

new SingleClass()在堆上开辟内存

指针指向堆上的内存

上述就是出现问题的原因

转载于:https://juejin.im/post/5c02322ae51d45225000f454

你可能感兴趣的文章
改善C#程序的建议10:用Parallel简化Task
查看>>
H5响应式布局
查看>>
poj 2002 Squares 几何二分 || 哈希
查看>>
拓扑图动态制作
查看>>
Eclipse Tips
查看>>
RSA加密、解密、签名、验签的原理及方法
查看>>
水印,图片验证码
查看>>
4.2 C#-----------------------------操作符的重载------------------------------------------
查看>>
给定单链表,检测是否有环等系列考题
查看>>
AngularJS
查看>>
例行报告
查看>>
ssh全注解整合
查看>>
R语言离群值处理分析
查看>>
走向DBA[MS SQL Server篇] - 从SQL语句的角度提高数据库的访问性能
查看>>
[转载]ASP.NET MVC3 及其学习资源
查看>>
JavaScript 中对变量和函数声明的“提前”
查看>>
非阻塞算法-栈
查看>>
java 打开记事本
查看>>
狗 日 的 360
查看>>
Policy in Reinforcement Learning
查看>>