AtomicReference 和 volatile 的区别
顾名思义,就是不会被打断!!!!!!
https://www.cnblogs.com/lpthread/p/3909231.html
java.util.concurrent.atomic工具包,支持在单个变量上解除锁的线程安全编程。
其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。
如果想让运算具有原子性, 请使用:
AtomicInteger
AtomicLong
类似i++这样的"读-改-写" 复合 操作(在一个操作序列中, 后一个操作依赖前一次操作的结果), 在多线程并发处理的时候会出现问题, 因为可能一个线程修改了变量, 而另一个线程没有察觉到这样变化,
当使用原子变量之后, 则将一系列的复合操作合并为一个原子操作,从而避免这种问题, i++=>i.incrementAndGet()
原子变量只能保证对一个变量的操作是原子的, 如果有多个原子变量之间存在依赖的复合操作, 也不可能是安全的,
另外一种情况是要将更多的复合操作作为一个原子操作, 则需要使用synchronized将要作为原子操作的语句包围起来. 因为涉及到可变的共享变量(类实例成员变量)才会涉及到同步, 否则不必使用synchronized
转载于:https://www.cnblogs.com/ydxblog/p/7885822.html
AtomicReference 和 volatile 的区别相关推荐
- synchronize和lock的区别 synchionzie与volatile的区别
synchronized与Lock的区别 https://www.cnblogs.com/iyyy/p/7993788.html Lock和synchronized和volatile的区别和使用 ht ...
- day 23-24 面试题:synchronized和volatile的区别;final,finally,finalize区别
面试题: 1. synchronized和volatile的区别 2. final,finally,finalize区别 1. synchronized和volatile的区别 1.1 JVM内存模型 ...
- 既生synchronized,何生volatile (synchronized与volatile的区别)
既生synchronized,何生volatile (synchronized与volatile的区别) 我们知道,synchronized和volatile两个关键字是Java并发编程中经常用到的两 ...
- C语言中auto,register,static,const,volatile的区别
1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是aut ...
- Java synchronized 和 volatile 的区别
java的线程抽象内存模型中定义了每个线程都有一份自己的私有内存,里面存放自己私有的数据,其他线程不能直接访问,而一些共享数据则存在主内存中,供所有线程进行访问. 上图中,如果线程A和线程B要进行通信 ...
- volatile的区别
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的 ...
- java中二进制怎么说_面试常用:说清楚Java中synchronized和volatile的区别
回顾一下两个关键字:synchronized和volatile 1.Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized.v ...
- 关于Synchornized,Lock,AtomicBoolean和volatile的区别介绍
1. volatile 变量可以被看作是一种 "程度较轻的 synchronized". 2. Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的 ...
- synchronized、volatile的区别
synchronized可以作用于变量.实例方法.静态方法,volatile只作用于变量. 同一时刻只有一个线程能进入synchronized作用的代码,其他线程会阻塞.volatile不会阻塞. s ...
最新文章
- Android 实现一个验证码倒计时(Handler postDelayed 实现验证码倒计时)
- Leangoo如何颠覆传统项目管理软件?
- mysql当数据改变时_MySQL中,当update修改数据与原数据相同时会再次执行吗?
- php签名墙代码,我们是一家人(签名墙)
- 访问数组元素进行赋值
- java + maven 实现发送短信验证码功能
- CF388C-Fox and Card Game【博弈论,结论】
- linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
- 分析器错误 分析器错误信息: 类型“Websystem.Global”不明确: 它可能来自程序集...的解决...
- GX works2 使用总结
- linux 与 windows操作系统的区别
- 百度HI QQ和MSN 阿里旺旺贸易通MSN在线客服聊天代码
- Matlab提示Ill-conditioned covariance created at iteration
- Java8 处理日期和时间
- 含protobuf程序运行时与libqgtk3.0.so冲突
- 很短,很文艺,很唯美。这才是真正的英文经典
- java 内存溢出 jstack,Java——命令jps、jstat、jmap、jstack、jhat、jinfo
- originpro2021导入excel(.xls)
- 《管理学》期末第一次复习
- 英语语法汇总(14.it的用法)
热门文章
- java如何快速抛出异常,异常 - 如何抛出异常 - 《Java 编程要点(Essential Java)》 - 书栈网 · BookStack...
- Spring AOP配置
- Werkzeug routing
- javascript Date object
- Elasticsearch head插件
- Java SpringBoot 页面渲染
- mosquitto查看订阅记录_Mosquitto\Client
- 系统分析师资料_软考 系统分析师考试通过总结
- vue向ifarm传值_vue组件间传值
- vSAN ReadyNode™中可以(也不能)更改的内容