即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

理解java.util.concurrent.atomic中的compareAndSet

编程语言 gooaaee 9℃ 0评论

今天在研究卷积神经网络的代码时看到多线程的问题,中间的compareAndSet方法不太理解,举例演示

线程1和线程2在运行时,想只让线程1运行if语句,但是如果在someone从false到true过程中线程2也开始运行,那么很可能线程2也会进入if条件体里面,如下所示。

示例1:


结果如下图:

很显然线程1和线程2都进入了if语句条件体里了。这不是我们需要的,我们只想让线程1进入条件体,拒绝线程2进入。当someone在赋值为真之后线程2肯定是进入不了条件体的,所以要在someone赋值为真之前也要拒绝线程2进入条件体。这就需要方法compareAndSet来实现了。

官方文档说明:



可见在从expect到update整个过程是不可分的,即原子性。

实现代码:



结果展示:


可以看到在someone从false到true的过程中是一个整体,没有被外来的线程2中间插入。

someone.compareAndSet(false,true)可以理解为:

if(someone == false){
    someone=true
}






转载请注明:CodingBlog » 理解java.util.concurrent.atomic中的compareAndSet

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情