java的原子性操作有哪些

Posted 麦子TMAC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的原子性操作有哪些相关的知识,希望对你有一定的参考价值。

Java中的原子操作包括:
1)除long和double之外的基本类型的赋值操作
2)所有引用reference的赋值操作
3)java.concurrent.Atomic.* 包中所有类的一切操作
count++不是原子操作,是3个原子操作组合
1.读取主存中的count值,赋值给一个局部成员变量tmp
2.tmp+1
3.将tmp赋值给count
可能会出现线程1运行到第2步的时候,tmp值为1;这时CPU调度切换到线程2执行完毕,count值为1;切换到线程1,继续执行第3步,count被赋值为1------------结果就是两个线程执行完毕,count的值只加了1;
还有一点要注意,如果使用AtomicInteger.set(AtomicInteger.get() + 1),会和上述情况一样有并发问题,要使用AtomicInteger.getAndIncrement()才可以避免并发问题










以上是关于java的原子性操作有哪些的主要内容,如果未能解决你的问题,请参考以下文章

364高并发的三大特性—原子性有序性可见性

Java中的哪些操作被认为是原子的?

什么是程序的原子性

JAVA的原子性和可见性,线程同步的理解

2. 原子性 Atomic

java并发特性:原子性可见性有序性