首页 > 编程语言 > 详细

Java并发 chapter2 线程安全

时间:2019-08-29 21:02:09      阅读:40      评论:0      收藏:0      [点我收藏+]

线程安全本质上是管理 可变共享状态 的访问

多个线程同时访问一个状态,且存在写操作,必须同步  #如果不存在写,则可以看作在时间区间内是不可变的,可变是相对于时间的

 

串行是安全的:自然顺序保证了时间上无交集

 

3种情况下对状态的访问是安全

1.不可变(无状态)

2.不跨线程

3.访问时同步

 2、3是通过限制访问(时间上无交集)

 

状态安全:不变约束、前置条件、后置条件 通通满足

 

 

 

原子性:状态的访问互斥

竞态:执行过程中 并发的操作可能 修改状态 破坏约束,通过互斥避免

如果状态被并发改变,则原子性被破坏=>原子性:状态不被并发改变=>互斥

参与约束的变量之间不独立——状态集合需要由同一原子操作更新,任一状态改变可能违反约束,竞态的延伸 

 

锁:互斥,串行

内部锁(jvm记录锁的占有者(线程)),同时保证原子性与可见性,可重入(jvm计数)

 

锁看做一种必要资源,互斥量

 

第一层抽象:锁是互斥量(资源)

第二层抽象:维护所有非独立的变量,对其中的每个变量访问都须获得同一个锁

第三层抽象:复合操作作为原子操作,互斥整个操作,则包含了其中的状态集

 

可见性?

 

Java并发 chapter2 线程安全

原文:https://www.cnblogs.com/qmc2077/p/11431864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!