「java原子对象」java的原子性
本篇文章给大家谈谈java原子对象,以及java的原子性对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 中 Integer 传参方式的问题,不是说Integer是引用传递么?但为什么不会改变it
- 2、Java中如何实现原子操作
- 3、java的原子数据类型有哪些?
- 4、什么是原子操作,java中的原子操作是什么
- 5、Java new 对象是否是原子性的
java 中 Integer 传参方式的问题,不是说Integer是引用传递么?但为什么不会改变it
Java本身都是值传递式的调用,对于对象传递的是地址值。给地址值重新赋值等于重新指向,不会影响外层。
而且这里Integer对象也有特殊性。其实现上可能类似
class Integer{
final int value; //一旦赋值,就不能改变。
}
这就出现:调用时传的地址值不能改变外层+对象本身又不能改变。导致这个值没法改变
解决方案很多
1、java风格就是,单个值用返回值。return i; 外面再i=foo();赋值;多个值用数组或对象。
2、传递自己的封装类。class MutableInteger{ int value;}
3、传递专用AtomicInteger原子整型对象
public static void main(String[] 参数) {
AtomicInteger i=new AtomicInteger(40);
i.intValue();
System.out.println(i);
}
public static void change(AtomicInteger i) {
i.set(55);
}
也可以实现传递后改值 ,
推荐方案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的原子数据类型有哪些?
选B了!
原子类型就是基本数据类型。一共有八种:
byte
short
int
long
char
boolean
float
double
String也可以算,也可以不算。既可以用
String
str="...";来定义,也可以用
String
str=new
String("...");来定义
什么是原子操作,java中的原子操作是什么
"原子操作(atomic operation)是不需要synchronized",所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch;
java中一般事务管理里面用到原子操作。
详细分析如下:
原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体是原子性的核心特征;
使用原子操作的好处:
⑴. 性能角度:它执行多次的所消耗的时间远远小于由于线程所挂起到恢复所消耗的时间,因此无锁的CAS操作在性能上要比同步锁高很多;
⑵. 业务需求:业务本身的需求上,无锁机制本身就可以满足我们绝不多数的需求,并且在性能上也可以大大的进行提升。
例子:我们使用的版本控制工具与之其实非常的相似,如果使用锁来同步,其实就意味着只能同时一个人对该文件进行修改,此时其他人就无法操作文件,如果生活中真正遇到这样的情况我们一定会觉得非常不方便,而现实中我们其实并不是这样,我们大家都可以修改这个文件,只是谁提交的早,那么他就把他的代码成功提交的版本控制服务器上,其实这一步就对应着一个原子操作,而后操作的人往往却因为冲突而导致提交失败,此时他必须重新更新代码进行再次修改,重新提交。
Java new 对象是否是原子性的
对新对象讨论原子性没有任何意义,不过可以告诉你,不具有原子性
你可以想一下,构造时就可能包含多个数据域的赋值。
希望可以帮到你,谢谢!
java原子对象的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java的原子性、java原子对象的信息别忘了在本站进行查找喔。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。