
正文
java保持代码原子性 java源代码怎么保存
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java 多线程里面经常提到原子性,那原子性到底是什么呢?求教!
原子性就是说一个操作不可以被中途cpu暂停然后调度, 即不能被中断, 要不就执行完, 要不就不执行. 如果一个操作是原子性java保持代码原子性的, 那么在多线程环境下, 就不会出现变量被修改等奇怪java保持代码原子性的问题.
相关问答
Q1: java多线程中如何保证变量的可见性,原子性
首先java保持代码原子性,要知道原子性和可见性是在并发环境需要思考的问题,所以下面的回答是围绕了并发场景来描述的。
如果大家不明白并发场景,请先了解java并发
原子性,可以理解为CPU层面不能分割的操作,那么 i++是原子操作吗java保持代码原子性?不是的,实际它是i=i+1,这个操作首先要读取i的值,然后为i值加1。是需要拆分的。非原子操作都会存在线程安全问题,需要java保持代码原子性我们使用同步技术(sychronized)来让它变成一个原子操作。有好几种方式实现一个原子操作。java提供了 sychronized代码块,lock接口(它的实现重入锁是比较常用的)。还可以使用原子数据结构。AtomicInteger、AtomicLong、AtomicReference等。
可见性。可以理解为线程层面各个线程之间对某个操作是透明的,各个线程可以及时知道引用的改变。volatile修饰的变量可以保证可见性,假如,一个变量只有 1或者0两种情况。那么volatile修饰之后,就不需要对这个变量加同步操作了。强调一下。volatile不能保证原子性。volatile修饰的整数i,在多线程下 i++之后,不能得到预期的值
Q2: Java开发中线程的安全问题以及产生的原因?
Java如何保证原子性常用的保证Java操作原子性的工具是锁和同步方法(或者同步代码块)。使用锁,可以保证同一时间只有一个线程能拿到锁,也就保证了同一时间只有一个线程能执行申请锁和释放锁之间的代码。
与锁类似的是同步方法或者同步代码块。使用非静态同步方法时,锁住的是当前实例;使用静态同步方法时,锁住的是该类的Class对象;使用静态代码块时,锁住的是synchronized关键字后面括号内的对象。
Q3: 在java中,什么是原子性
:原子性,就是不会有中间状态存在,要么什么都没改变,要么全都改变。不会有一部分没改变,一部分改变了。 引用赋值,或者说所有赋值操作都不是原子性的。 对应的原子类是AtomicReferenc。类似的也有AtomicLong之类的原子类,来保证赋值的原子性
Q4: java volatile变量为什么不能保证原子性
被volatile修饰的变量保证的是可见性,不是原子性。这是两个不同的概念。
可见性是指不论在哪个线程中看,同一个对象同一时刻的值总是一样的,不会出现不一致的情况。
原子性是指一个操作要么完成,要么没有完成,不会出现完成了一半的情况。
Q5: Java是怎么保证原子性,可见性
首先java保持代码原子性,要知道原子性和可见性是在并发环境需要思考java保持代码原子性的问题java保持代码原子性,所以下面的回答是围绕了并发场景来描述的。
如果大家不明白并发场景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保持代码原子性的信息别忘了在本站进行查找喔。






