悲观锁: 一定会有并发发生,先提前预防
乐观锁: 不一定会发生并发,真的有并发的话再做处理
synchronized(x.class)就是悲观锁
自旋锁:不需要上锁,每次在做叠加的时候进行检查,直到检查没有发生变化后就不在循环
自旋锁:一种常见的乐观锁的实现
ABA问题:加版本(version boolean):如果发现版本号不一样,具体问题具体分析(try...catch,
做回滚,查看日志)
保障CAS操作的原子性问题(lock指令)
通过版本号解决ABA问题:
通过Boolean类型解决ABA问题:
读写锁,排他锁,共享锁
排他锁:只有一个线程能访问代码
共享锁:可以允许多个线程访问代码
读写锁:
-读锁:读的时候,不允许写,但是允许同步读
-写锁:写的时候,不允许写,也不允许读(写的时候不允许读,避免脏读状态)
共享锁的实现方式(信号量):
统一锁、分段锁
分段锁:比如说链表进行并发插入这时候,链表数据非常大。这时候可以将链表分为一段一段的,插入的
时候锁定段即可。数据库插入的时候 找到对应的段 然后做插入。