HashMap
HashMap 同时写会 crash
所以遇到 HashMap 可能同时写的场景:
- Synchronized(hashmap) { // 写的场景 }
- 使用 ConcurrentHashMap
Synchronize
Synchronize 修饰普通方法,锁住的就是当前这个实例对象。
一般来说,锁的开销不大,需要的话可以直接把整个方法加锁(待考证,为什么开销不大呢)
我遇到的情况是,本地有缓存实验配置,但是代码中会按频率更新实验配置,所以注册了一个更新实验配置的回调,在回调中清除本地的实验配置缓存。get() 实验配置,clear() 清除缓存。如果不加锁,在 get() 的时候 clear() 了缓存就会有问题。所以这里可以直接在 get() clear() 方法外加锁。
事务
事务指的是一系列操作,要么全部执行完成,要么全部不执行
事务的特性:ACID
- 原子性:一系列操作要么全部执行,要么全部不执行。(转账操作,转账和收款要么全执行要么全不执行)
- 一致性:事务的执行使得数据从一个状态转化到另一个状态,但是对于整个数据的完整性保持稳定。(假设A、B的账上共有20000元,无论A和B之间怎么转账,A、B的账上也还是20000元)
- 隔离性:多个用户并发访问数据库时,数据库为每一个用户开的事务,不会被其他事务的操作干扰,多个并发事务之间要相互隔离。(对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。)
- 持久性:当事务正确完成后,它对于数据的改变是永久性的。
https://cloud.tencent.com/developer/article/1133074