CAS与ConcurrentLinkedQueue

来源:9-25 并发容器总结

布鲁马3518274

2021-04-07

看了看ConcurrentLinkedQueue实战,发现全是CAS操作,突然想到CAS操作到底什么情况会有劣势?(哪种情况会自旋很多次?比如大量并写?就是大量相同的操作)

我看了源码实现,其中ConcurrentLinkedQueue中就是直接调用compareAndSwapObject,如果不是预期就会循环Java层拿新的节点,这样高并发情况下会自旋很多次

而AtomicInteger中调用自旋逻辑中会看到一个getIntVolatile逻辑,这个看方法就会去刷新内存,保证可见性。所以感觉子旋次数一般都只会有一次。

结论:ConcurrentLinkedQueue这样的子旋有时就会很多。而Atomic由于会有一个去取可见性最新的数据,子旋次数一般情况不会多。

不知这样分析对不对,还请老师解答下(真不知道这样的思考除了问老师还问谁~)

写回答

1回答

悟空

2021-04-07

ConcurrentLinkedQueue和Atomic在高并发的时候,都会有很多自旋的,所以如果是并发特别高,性能还不如加锁。

0
2
悟空
回复
布鲁马3518274
客户端的话,确实不会很大并发量哈。并发量主要在服务端。
2021-04-11
共2条回复

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

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

1599 学习 · 573 问题

查看课程