Java并发 chapter2 线程安全

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

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

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

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

1.不可变(无状态)

2.不跨线程

3.访问时同步

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

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

原子性:状态的访问互斥

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

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

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

锁:互斥,串行

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

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

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

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

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

可见性?

猜你喜欢

转载自www.cnblogs.com/qmc2077/p/11431864.html
今日推荐