37-结果分析
结果分析
ParkingCounter
类通过两个原子操作来扩展 AtomicInteger
类: carIn()
和 carOut()
。本案例模拟了一个控制停车场内汽车数量的系统。停车场可以容纳多辆汽车,这由 maxNumber
字段表示。
carIn()
操作将停车场中的实际汽车数量与最大值进行比较。如果它们相等,则汽车不能进入停车场,并且该方法返回 false
;否则,它使用以下原子操作结构。
- 获取局部变量中原子对象的值。
- 将新值存储在不同变量中。
- 使用
compareAndSet()
方法尝试用新值替换旧值。如果此方法返回true
,则表示作为参数发送的旧值是该变量的值;因此,它改变了数值。当carIn()
方法返回true
时,表明该操作以原子方式进行。如果compareAndSet()
方法返回false
,则意味着作为参数发送的旧值不是该变量的值(另一个线程对其进行了修改);因此,该操作不能以原子方式完成。操作再次开始,直到可以以原子方式完成。
carOut()
方法类似于 carIn()
方法。还实现了两个使用 carIn()
和 carOut()
方法模拟停车活动的 Runnable
对象。当程序执行时,你可以看到停车场中的汽车数从未超过最大值。