1.啥是java的原子性

  原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

  一个很经典的例子就是银行账户转账问题:

  比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。

  试想一下,如果这2个操作不具备原子性,会造成什么样的后果。假如从账户A减去1000元之后,操作突然中止。然后又从B取出了500元,取出500元之后,再执行 往账户B加上1000元 的操作。这样就会导致账户A虽然减去了1000元,但是账户B没有收到这个转过来的1000元。

  所以这2个操作必须要具备原子性才能保证不出现一些意外的问题。

  同样地反映到并发编程中会出现什么结果呢?

  举个最简单的例子,大家想一下假如为一个32位的变量赋值过程不具备原子性的话,会发生什么后果?

i=9;

假若一个线程执行到这个语句时,我暂且假设为一个32位的变量赋值包括两个过程:为低16位赋值,为高16位赋值。

  那么就可能发生一种情况:当将低16位数值写入之后,突然被中断,而此时又有一个线程去读取i的值,那么读取到的就是错误的数据。

1.啥是java的原子操作(我的理解跟原子性就是一个意思)

  1. "原子操作(atomic operation)是不需要synchronized",所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch;

  2. java中一般事务管理里面用到原子操作。

    1. 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体是原子性的核心特征;

    2. 使用原子操作的好处:

      ⑴. 性能角度:它执行多次的所消耗的时间远远小于由于线程所挂起到恢复所消耗的时间,因此无锁的CAS操作在性能上要比同步锁高很多;

      ⑵. 业务需求:业务本身的需求上,无锁机制本身就可以满足我们绝不多数的需求,并且在性能上也可以大大的进行提升。

      例子:我们使用的版本控制工具与之其实非常的相似,如果使用锁来同步,其实就意味着只能同时一个人对该文件进行修改,此时其他人就无法操作文件,如果生活中真正遇到这样的情况我们一定会觉得非常不方便,而现实中我们其实并不是这样,我们大家都可以修改这个文件,只是谁提交的早,那么他就把他的代码成功提交的版本控制服务器上,其实这一步就对应着一个原子操作,而后操作的人往往却因为冲突而导致提交失败,此时他必须重新更新代码进行再次修改,重新提交。

最新文章

  1. 关于“模仿"和”创新“
  2. Okhttp https
  3. WCF 入门(23,24)
  4. Linux下使用Speedtest测试网速
  5. lnmp安装--php安装
  6. 网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)
  7. Docker存储驱动之Btrfs简介
  8. 详解python命名空间和作用域
  9. Ubuntu配置Django+ Apache2+ mysql
  10. 剑指offer-数据流中的中位数
  11. 约会 倍增lca
  12. Docker 的点点滴滴
  13. jmeter基本组成原件介绍
  14. 在IIS上启用Gzip压缩(HTTP压缩)
  15. selenium PO模式
  16. react-demo
  17. strpos 的正确使用方式
  18. python 函数参数 *a **kw
  19. VS Code使用Git管理代码
  20. Javascript Get or Set Checked Radio Value

热门文章

  1. hdu 4240在(最大流)
  2. 杭电 1280 前m大的数
  3. 一道money计算题引发的思考
  4. Python学习笔记14—模块
  5. java框架---->RxJava的使用(一)
  6. 【BZOJ3417】Poi2013 Tales of seafaring 分层图BFS
  7. 【BZOJ4155】[Ipsc2015]Humble Captains 最小割+DP
  8. js 操作对象的引用和操作实际对象的区分
  9. Java Swing 日历 控件
  10. Windows下使用Gflags检查内存越界