顾名思义,就是不会被打断!!!!!!

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 的区别相关推荐

  1. synchronize和lock的区别 synchionzie与volatile的区别

    synchronized与Lock的区别 https://www.cnblogs.com/iyyy/p/7993788.html Lock和synchronized和volatile的区别和使用 ht ...

  2. day 23-24 面试题:synchronized和volatile的区别;final,finally,finalize区别

    面试题: 1. synchronized和volatile的区别 2. final,finally,finalize区别 1. synchronized和volatile的区别 1.1 JVM内存模型 ...

  3. 既生synchronized,何生volatile (synchronized与volatile的区别)

    既生synchronized,何生volatile (synchronized与volatile的区别) 我们知道,synchronized和volatile两个关键字是Java并发编程中经常用到的两 ...

  4. C语言中auto,register,static,const,volatile的区别

    1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是aut ...

  5. Java synchronized 和 volatile 的区别

    java的线程抽象内存模型中定义了每个线程都有一份自己的私有内存,里面存放自己私有的数据,其他线程不能直接访问,而一些共享数据则存在主内存中,供所有线程进行访问. 上图中,如果线程A和线程B要进行通信 ...

  6. volatile的区别

    Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的 ...

  7. java中二进制怎么说_面试常用:说清楚Java中synchronized和volatile的区别

    回顾一下两个关键字:synchronized和volatile 1.Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized.v ...

  8. 关于Synchornized,Lock,AtomicBoolean和volatile的区别介绍

    1.  volatile 变量可以被看作是一种 "程度较轻的 synchronized". 2.  Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的 ...

  9. synchronized、volatile的区别

    synchronized可以作用于变量.实例方法.静态方法,volatile只作用于变量. 同一时刻只有一个线程能进入synchronized作用的代码,其他线程会阻塞.volatile不会阻塞. s ...

最新文章

  1. Android 实现一个验证码倒计时(Handler postDelayed 实现验证码倒计时)
  2. Leangoo如何颠覆传统项目管理软件?
  3. mysql当数据改变时_MySQL中,当update修改数据与原数据相同时会再次执行吗?
  4. php签名墙代码,我们是一家人(签名墙)
  5. 访问数组元素进行赋值
  6. java + maven 实现发送短信验证码功能
  7. CF388C-Fox and Card Game【博弈论,结论】
  8. linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
  9. 分析器错误 分析器错误信息: 类型“Websystem.Global”不明确: 它可能来自程序集...的解决...
  10. GX works2 使用总结
  11. linux 与 windows操作系统的区别
  12. 百度HI QQ和MSN 阿里旺旺贸易通MSN在线客服聊天代码
  13. Matlab提示Ill-conditioned covariance created at iteration
  14. Java8 处理日期和时间
  15. 含protobuf程序运行时与libqgtk3.0.so冲突
  16. 很短,很文艺,很唯美。这才是真正的英文经典
  17. java 内存溢出 jstack,Java——命令jps、jstat、jmap、jstack、jhat、jinfo
  18. originpro2021导入excel(.xls)
  19. 《管理学》期末第一次复习
  20. 英语语法汇总(14.it的用法)

热门文章

  1. java如何快速抛出异常,异常 - 如何抛出异常 - 《Java 编程要点(Essential Java)》 - 书栈网 · BookStack...
  2. Spring AOP配置
  3. Werkzeug routing
  4. javascript Date object
  5. Elasticsearch head插件
  6. Java SpringBoot 页面渲染
  7. mosquitto查看订阅记录_Mosquitto\Client
  8. 系统分析师资料_软考 系统分析师考试通过总结
  9. vue向ifarm传值_vue组件间传值
  10. vSAN ReadyNode™中可以(也不能)更改的内容