悲观锁和乐观锁

悲观锁:synchronized

  • 认为别的线程都会修改数据,每次都上锁。

乐观锁:CAS

  • 起初不操作,最后修改对比版本,不一致再拒绝。

可重入锁和不可重入锁

可重入锁:synchronizedReentrantLock

  • 外层锁了以后,内层仍可以直接使用其他相同锁的方法,不需要重新获得锁
  • 不会死锁

不可从重入锁

  • 外层锁了之后,内层使用需要排队

公平锁和不公平锁

公平锁:

  • 等待队列中,按照申请顺序获取锁

不公平锁:synchronizedReentrantLock

  • 等待队列中,随机抽取线程获取锁
  • 性能高于公平锁,可以重复利用CPU时间

自旋锁:

  • TicketLockCLHLockMSCLock
  • A线程上锁之后,B线程调用A线程的时候会不断循环等待解锁。此时其他的线程就不能再调用A了。
  • 优点:减少了上下文切换
  • 缺点:不断的循环增加CPU消耗
Last modification:March 18th, 2021 at 10:27 pm
我从来都不喜欢钱,我也没碰过钱,我对钱没兴趣