首页编程java编程java中的原子性是什么(在java中,什么是原子性)

java中的原子性是什么(在java中,什么是原子性)

编程之家2023-10-11103次浏览

大家好,关于java中的原子性是什么很多朋友都还不太明白,今天小编就来为大家分享关于在java中,什么是原子性的知识,希望对各位有所帮助!

java中的原子性是什么(在java中,什么是原子性)

Java是怎么保证原子性,可见性

首先,要知道原子性和可见性是在并发环境需要思考的问题,所以下面的回答是围绕了并发场景来描述的。

如果大家不明白并发场景,请先了解java并发

原子性,可以理解为CPU层面不能分割的操作,那么 i++是原子操作吗?不是的,实际它是i=i+1,这个操作首先要读取i的值,然后为i值加1。是需要拆分的。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。有好几种方式实现一个原子操作。java提供了 sychronized代码块,lock接口(它的实现重入锁是比较常用的)。还可以使用原子数据结构。AtomicInteger、AtomicLong、AtomicReference等。

java中的原子性是什么(在java中,什么是原子性)

可见性。可以理解为线程层面各个线程之间对某个操作是透明的,各个线程可以及时知道引用的改变。volatile修饰的变量可以保证可见性,假如,一个变量只有 1或者0两种情况。那么volatile修饰之后,就不需要对这个变量加同步操作了。强调一下。volatile不能保证原子性。volatile修饰的整数i,在多线程下 i++之后,不能得到预期的值

请问java中的原子操作有哪些

13是, 24不是,但并不是楼上说的意思哦,原子操作可以和多线程结合起来看。

首先楼主你要知道原子操作是什么,我的理解是符合多线程原子性操作的操作就叫原子操作。

java中的原子性是什么(在java中,什么是原子性)

原子是世界上的最小单位,具有不可分割性。比如 a=0;(a非long和double类型)这个操作

是不可分割的,那么我们说这个操作是原子操作。再比如:a++;这个操作实际是a= a+ 1;

是可分割的,所以他不是一个原子操作。

例如:你执行a= 1这个操作的时候,是没有任何问题的,但是当你执行a= b的时候就有很大的问题了

假如这个时候别的线程改变了b的值,那么a= b就会出现不同的结果,因为b的值你并不能确定,

比如你第期望的是a= b,你认为b的值是3,所以a也是3,可是多线程情况下程序使b变成了

4,那么a也就变成了4,那这就不算一个原子操作。

在java中,什么是原子性

不能被分开操作的一段代码,就叫原子对象。。

比如,你在atm取款机取钱,atm程序中吐钱跟在你账户上扣掉等额的数目就是一个原子性的操作,这两个动作一定要连在一起操作,要么都成功,要么都失败,不可以被分开只执行某一部分。

像这样的操作,我们叫它原子操作。

吐钱跟账户上扣钱这两个行为对象是严格合为一体的,不可以被分开,我们称这样的对象为原子对象

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()才可以避免并发问题

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

喜马拉雅山在哪(喜马拉雅山在哪个县)java有什么用 知乎?java有什么作用