「java原子」java原子变量
今天给各位分享java原子的知识,其中也会对java原子变量进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、请问java中的原子操作有哪些?
- 2、在java中,什么是原子性
- 3、java的原子数据类型有哪些?
- 4、什么是原子操作,java中的原子操作是什么
- 5、Java中如何实现原子操作
- 6、Java是怎么保证原子性,可见性
请问java中的原子操作有哪些?
13是, 24不是, 但并不是楼上说的意思哦, 原子操作可以和多线程结合起来看。
首先楼主你要知道原子操作是什么,我的理解是符合多线程原子性操作的操作就叫原子操作。
原子是世界上的最小单位,具有不可分割性。比如 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的原子数据类型有哪些?
选B了!
原子类型就是基本数据类型。一共有八种:
byte
short
int
long
char
boolean
float
double
String也可以算,也可以不算。既可以用
String
str="...";来定义,也可以用
String
str=new
String("...");来定义
什么是原子操作,java中的原子操作是什么
"原子操作(atomic
operation)是不需要synchronized",这是Java多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何
context
switch
(切[1]
换到另一个线程)。
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是怎么保证原子性,可见性
首先,要知道原子性和可见性是在并发环境需要思考的问题,所以下面的回答是围绕了并发场景来描述的。
如果大家不明白并发场景,请先了解java并发
原子性,可以理解为CPU层面不能分割的操作,那么 i++是原子操作吗?不是的,实际它是i=i+1,这个操作首先要读取i的值,然后为i值加1。是需要拆分的。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。有好几种方式实现一个原子操作。java提供了 sychronized代码块,lock接口(它的实现重入锁是比较常用的)。还可以使用原子数据结构。AtomicInteger、AtomicLong、AtomicReference等。
可见性。可以理解为线程层面各个线程之间对某个操作是透明的,各个线程可以及时知道引用的改变。volatile修饰的变量可以保证可见性,假如,一个变量只有 1或者0两种情况。那么volatile修饰之后,就不需要对这个变量加同步操作了。强调一下。volatile不能保证原子性。volatile修饰的整数i,在多线程下 i++之后,不能得到预期的值
java原子的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java原子变量、java原子的信息别忘了在本站进行查找喔。