从头认识java-17.4 具体解释同步(2)-具体解释竞争条件
这一章节我们来具体讨论一下竞争条件。
1.为什么会引起竞争条件?
因为操作缺失原子性。
2.什么是原子性?
所谓原子操作是指不会被线程调度机制打断的操作;这样的操作一旦開始,就一直运行到结束。中间不会有不论什么 context switch (切换到还有一个线程)。
3.分解上一章节转账的步骤:
(1)读取某个账户的剩余金额。对照提取的金额
if (accounts[fromAccount] < money) {
return;
}
(2)从A账户转出XXX元
accounts[fromAccount] -= money;
(3)从B账户转入XXX元
accounts[toAccount] += money;
4.因为不具备原子性,并且是多线程运行,因此我们能够如果:
(1)如今线程A已经运行了上面的第一第二步
(2)如今线程B启动。对相同的账户进行上面的第一第二步
(这个时候已经出错了)
(3)线程A再运行第三步
(4)线程B再运行第三步
循环....
我们上面仅仅是列出两个线程同一时候工作的情况,可是我们的測试程序开了20个线程。如果现实其中可能是20000甚至2000000个线程,数据直接就乱套了。
5.步骤图:
6.更糟的情况
因为决定这个误差出现的概率是由步骤2到步骤3之间的时间控制的,时间越长,误差出现的概率越高。
总结:这一章节主要具体讨论了竞争条件。
这一章节就到这里,谢谢。
-----------------------------------
从头认识java-17.4 具体解释同步(2)-具体解释竞争条件的更多相关文章
- java的(PO,VO,TO,BO,DAO,POJO)解释
java的(PO,VO,TO,BO,DAO,POJO)解释 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定, ...
- java的(PO,VO,TO,BO,DAO,POJO)解释1
java的(PO,VO,TO,BO,DAO,POJO)解释 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定 ...
- 关于VO、PO的理解——java的(PO,VO,TO,BO,DAO,POJO)解释
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据. 在O/R Mapping的世界里,有 ...
- 简单测试Java线程安全中阻塞同步与非阻塞同步性能
摘抄自周志明老师的<深入理解Java虚拟机:JVM高级特性与最佳实践>13.2.2 线程安全的实现方法 1.名词解释 同步是指锁哥线程并发访问共享数据时,保证共享数据同一时刻只被一个线程访 ...
- Java并发编程(您不知道的线程池操作), 最受欢迎的 8 位 Java 大师,Java并发包中的同步队列SynchronousQueue实现原理
Java_并发编程培训 java并发程序设计教程 JUC Exchanger 一.概述 Exchanger 可以在对中对元素进行配对和交换的线程的同步点.每个线程将条目上的某个方法呈现给 exchan ...
- java 8 - java 17 升级指北
2014年发布的java SE 8和2017年发布的java EE 8,至今还是使用最广泛的java版本,大部分java开发者对于java 8之后的升级总是敬而远之,这跟java 9以后的破坏性升级和 ...
- Java线程:线程的同步-同步方法
Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段. 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问 ...
- (转)Java线程:线程的同步与锁
Java线程:线程的同步与锁 一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Fo ...
- Java多线程之线程的同步
Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同 ...
- Java代码质量改进之:同步对象的选择
在Java中,让线程同步的一种方式是使用synchronized关键字,它可以被用来修饰一段代码块,如下: synchronized(被锁的同步对象) { // 代码块:业务代码 } 当synchro ...
随机推荐
- MySql sqlstate代码大全(转载)
http://blog.csdn.net/u013847120/article/details/52887813 本章列出了当你用任何主机语言调用MySQL时可能出现的错误.首先列出了服务器错误消息. ...
- python __slot__
class Player(object): def __init__(self,name,age,life): self.name=name self.age=age self.life=life c ...
- 关于bitmap recycle trying to use a recycled bitmap android.graphics.Bitmap
在开发中,一直使用4.0以上手机作为測试机所以一直没有出现这个问题,今天换了2.3版本号的手机.出现了这个错误: trying to use a recycled bitmap android.gra ...
- RGB和HSL色彩的相互转换
转自: http://blog.csdn.net/aniven/article/details/2205851 RGB和HSL(也叫HSB/HSV)是两种色彩空间,即:红,绿,蓝(Red,Green, ...
- Oracle中查询某字段不为空或者为空的SQL语句怎么写
比如 insert into table a (a1,b1)values("a1",''); 对于这种情况,因为表里存的是'',其实是没有内容的,要查询这个字段,不能直接使用 se ...
- Mybatis学习记录(六)--开发中的小问题
近期開始做项目,期间遇到一些小问题,开此贴记录一下 1.关于order by 今天写一个sql查询语句,用了order by可是一直没效果,后来才发现用了#{}取值,mybatis使用这个的话对于St ...
- 将项目从tomcat 迁移到JBoss5.0
http://java-boy.iteye.com/blog/531411从Tomcat升级到JBoss5.1真是一个痛苦的过程,可能遇到很多问题.以下是我碰到的问题,及解决方法. 一.Hiberna ...
- chrome的input输入框填充后背景颜色变成黄色 (input:-webkit-autofill 导致的)
填写form表单时发现chrome的一个好坑啊! 当你之前有填写过表单,获取焦点时,input会有一个记录之前填写过的文本的下拉列表式的东东, 按理说,这没什么问题,很多时候为了方便,也需要它记录输入 ...
- bootstrap源码学习与示例:bootstrap-tab
http://www.cnblogs.com/rubylouvre/archive/2012/12/22/2829176.html bootstrap源码学习与示例 https://www.w3sc ...
- JS检查浏览器类型和版本号
先取得Navigator对象的userAgent属性的小写信息,之后依据正則表達式推断赋值. var Sys = {}; var ua = navigator.userAgent.toLowerCas ...