假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。原子操作是指,对于访问同一个状态的所有操作(包括该操作本身)来说,这个操作都是一个以原子方式执行的操作。

1、竞态条件(Race conditions):在并发编程中,错误的结果在倒霉时刻(unlucky timing)存在的可能性,是一种非常重要的情况,它就是竞态条件。

最常见的竞态条件类型就是“先检查后执行(check-then-act)”操作,即通过一个可能失效的观测结果来决定下一步的动作。

2、示例:延迟初始化(lazy initialization)。使用“check-then-act”操作的一种常见情况就是延迟初始化。延迟初始化的目的是将对象的初始化操作推迟到实际被使用时才进行,同时要确保只被初始化一次。例如:

@NotThreadSafe
public class LazyInitRace {private ExpensiveObject instance = null;public ExpensiveObject getInstance() {if (instance == null) {instance = new ExpensiveObject();}return instance;}}

假定线程A和线程B同时执行getInstance。线程A和线程B都需要判断instance是否为空。此时的instance是否为空,取决于不可预测的时序,包括线程的调度方式,以及A需要花多长时间来初始化ExpensiveObject并设置instance实例。
        3、复合操作(Compound actions)。我们将“check-then-act”和“read-modify-write”等操作统称为复合操作。包含了一组必须以原子方式执行的操作以确保线程安全性。

《Java Concurrency in Practice》之原子性(Atomicity)相关推荐

  1. Java Concurrency In Practice

    线程安全 定义 A class is thread-safe if it behaves correctly when accessed from multiple threads, regardle ...

  2. 《Java Concurrency in Practice》中文版笔记

    第1章 简介 1.1 并发简史 茶壶和面包机的生产商都很清楚:用户通常会采用异步方式来使用他们的产品,因此当这些机器完成任务时都会发出声音提示. 1.2 线程的优势 线程能够将大部分的异步工作流转换成 ...

  3. 《Java Concurrency in Practice》之可见性(Visibility)

    原文:Visibility is subtle because the things that can go wrong are so counterintuitive.译文:可见性是微妙的,因为可能 ...

  4. 【读后感】Java Concurrency in Practice:7.线程池的使用

    0. 我是真的不知道为什么不打算开车还得考驾照 本章将介绍对线程池进行配置与调优的一些高级选项,并分析在使用任务执行框架时需要注意的各种危险,以及Executor的一些高级的使用方法. 1. 在任务与 ...

  5. Race condition--Java Concurrency In Practice C02读书笔记

    [本文是我对Java Concurrency In Practice第二章的归纳和总结,  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 多线程环境下,无需调用方进行任何同步处理也能保 ...

  6. Java Concurrency Essentials教程

    课程大纲 并发一直是开发人员面临的挑战,编写并发程序可能非常困难. 引入并发性时,可能会发生很多事情,并且系统的复杂性会大大增加. 但是,编写健壮的并发程序的能力是开发人员的必备工具,并且可以帮助构建 ...

  7. 深入浅出 Java Concurrency (33): 线程池 part 6 线程池的实现及原理 (1)[转]

    线程池数据结构与线程构造方法 由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构.图1描述了这种数据结构. 图1 Thre ...

  8. ACID 原子性Atomicity,一致性Consistency,隔离性Isolation,持久性Durability

    原子性Atomicity 指事务必须是一个原子的操作序列单元.事务中包含的各项操作在一次执行过程中,只允许出现以下两种状态之一 .全部成功执行. · 全部不执行. 任何一项操作失败都将导致整个事务失败 ...

  9. Java并发编程实践笔记之——原子性(Atomicity)

    竞态条件(Race Condition) ++count这个操作是紧凑的语法,但并非原子的,包含了三个独立的操作(读取-修改-写入) 由于不恰当的执行时序而出现不正确的结果(或者说计算结果的正确性取决 ...

最新文章

  1. Flutter 导包 以及体验
  2. 强化学习教父Richard Sutton新论文探索决策智能体的通用模型:寻找跨学科共性...
  3. oracle导出超过100m的数据库,Oracle数据库的导出和导入
  4. python画图代码彩虹-echarts绘制彩虹图
  5. Android使用 LruCache 缓存图片
  6. Python从头/尾删除子符串的正确操作
  7. 浅谈 翻硬币游戏【Nim博弈】
  8. GridView多行表头合并
  9. IIS上的web service调用AX服务问题
  10. python 图片地址_python解码data:image开头的图片地址
  11. word粘贴至html特殊字符 粘贴后可能为乱码
  12. Ackermann函数的递归求值
  13. 量化研究: Julia还是Matlab?
  14. 中国知名的12个股份制商业银行,你知道几个?
  15. linux安装微信 安装百度网盘 下载大文件
  16. 一口气读完系列最穷的穷光蛋
  17. 2013年新交规科目二考试实录(北京京东驾校)
  18. 轻松打造自己的站内搜索引擎
  19. 常见服务器默认管理口地址
  20. 春天不健脾养胃 也要等什么时候

热门文章

  1. Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
  2. 全基因组关联分析(Genome-Wide Association Study,GWAS)流程
  3. CSS 3.0实现时光轴加载动画
  4. Devart Excel 插件 Crack,Microsoft Excel 和非常普通的 Excel 电子表格
  5. Unity2D像素人物替换不同装备和特效的解决方案
  6. python10以内的加减计算器_python学习之实现简单计算器(加减乘除)小学生能力测试-Go语言中文社区...
  7. scala的伴生类和伴生对象所属类是什么?
  8. 9_js 日期对象Date()、js定时器、获取窗口属性、获取dom尺寸、脚本化css
  9. 【无标题】求大神教下光谱曲线相关性分析置信区间怎么算的?
  10. 渣打称中国房市出现泡沫 未归还房贷占GDP32%