发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 CQRS

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

         
2011-10-27 15:19
赞助商链接

java.util.concurrent.atomic.AtomicMarkableReference类

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

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是不是被改了,如果不是再吃回头草。

多线程      同步或锁     

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com