【运用向】对java.util.concurrent.atomic包中,某个类问题

11-10-27 SpeedVan
java.util.concurrent.atomic.AtomicMarkableReference类

介绍说能够几个对象同时变更,这个同时是原子的吧,那么如何用呢?这个和我原子更新N个对象的方式貌似不同,求解答一下。(网上查这个类,基本没有例子,只有doc,这个类看来不怎么热呢)

         

banq
2011-10-28 07:44
The Art of Multiprocessor Programming多线程编程艺术一书中有谈:是为了避免ABA问题。

所谓ABA问题;经常用在动态内存管理(reclamation )上,当我们使用类似compareAndSet()这样的有条件锁时,如果compareAndSet()修改了一个引用指向,比如从a改到b,然后再改回a,但是这段期间a内部的数据可能已经变了,不再是原来的a,但是compareAndSet()不管这些,还是依然改回指向a,就象好马不吃回头草,吃了才发现已经不是原来的了。

为了避免这种情况,使用AtomicStampedReference,它能把引用和一个整数型的stamp标签一起保存起来,这两个值能够原子更改,这样compareAndSet()如果想改回原来的a,首先检查一下stamp是不是被改了,如果不是再吃回头草。

猜你喜欢