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

布鲁马3518274
2021-04-07
看了看ConcurrentLinkedQueue实战,发现全是CAS操作,突然想到CAS操作到底什么情况会有劣势?(哪种情况会自旋很多次?比如大量并写?就是大量相同的操作)
我看了源码实现,其中ConcurrentLinkedQueue中就是直接调用compareAndSwapObject,如果不是预期就会循环Java层拿新的节点,这样高并发情况下会自旋很多次
而AtomicInteger中调用自旋逻辑中会看到一个getIntVolatile逻辑,这个看方法就会去刷新内存,保证可见性。所以感觉子旋次数一般都只会有一次。
结论:ConcurrentLinkedQueue这样的子旋有时就会很多。而Atomic由于会有一个去取可见性最新的数据,子旋次数一般情况不会多。
不知这样分析对不对,还请老师解答下(真不知道这样的思考除了问老师还问谁~)
写回答
1回答
-
悟空
2021-04-07
ConcurrentLinkedQueue和Atomic在高并发的时候,都会有很多自旋的,所以如果是并发特别高,性能还不如加锁。
022021-04-11