多个线程竞争同步资源的流程细节有没有区别?
不锁住资源,多个线程只能有一个修改资源成功,其他线程会重试
无锁
多个线程竞争同步资源时,没有获取资源的线程自旋等待锁释放
轻量级锁
多个线程竞争同步资源时,没有获取资源的线程阻塞等待唤醒
重量级锁
锁优化策略
标志位修改等可见性场景优先使用volatile
数值递增场景优先使用Atomic原子类
数据允许多副本场景优先使用读写锁
读多写少需要加锁的场景优先使用读写锁
<font color="#c41230">尽可能减少线程对锁的占用时间</font>
<font color="#c41230">尽可能减少线程对数据加锁的粒度(分段加锁)</font>
尽可能按照不同场景拆分对锁功能的使用
避免在循环中频繁加锁
<font color="#c41230">尽量减少高并发场景中线程对锁的争用</font>