为什么要用getAndIncrement 再判断 if (c + 1 < capacity)

来源:9-24 其他BlockingQueue类型的介绍

Kevin7012055

2020-11-18

老师您好:

 为什么要用getAndIncrement 再判断 if (c + 1 < capacity),为什么不直接用incrementAndGet <capacity这样呢?

写回答

1回答

哈哈大圣618

2020-11-18

我认为getAndIncrement获取到值后直接在当前线程中进行操作,而incrementAndGet会使用CAS算法去进行比较替换,期间可能替换失败而导致过多的自旋操作,用getAndIncrement就没有多余的自旋操作这个步骤了

0
1
Kevin7012055
非常感谢! 看到源码里两个调用unsafe 一个是return unsafe.getAndAddInt(this, valueOffset, 1); 另一个是return unsafe.getAndAddInt(this, valueOffset, 1) + 1; 好像没啥区别 :)
2020-11-25
共1条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程