乐观锁:也叫无锁变成
cas 是乐观锁的基础,比较:内存中的值A 在修改之前先判断 与A是否相等 如果相等就修改不等就重试
悲观锁:其实就是每次有线程来读数据,就上锁,只有等锁释放其他线程才能修改
自旋锁:自旋锁其实就是死循环不断去抢锁
synchronized锁升级:偏向锁,轻量锁,重量锁
偏向锁就是偏向第一个得到锁的线程,当线程竞争不激励的时候只有一个线程 synchroized就是偏向锁,如果线程竞争激励了两个线程竞争锁synchroized就会升级成轻量锁或叫自旋锁,因为线程竞争激烈所有在挣抢锁的时候抢不到的线程就是进入自旋一直争抢直到抢到位置所以比较消耗资源。如果竞争更加激烈了有很多线程都在自旋就会升级成重量锁,争抢不到锁的线程直接挂起。
重入锁:就是同一个线程可以再次获取同一个锁,Lock和synchroized 都是可重入锁。
公平锁和非公平锁:公平锁就是获取锁根据先到先得原则,非公平锁就是随机。ReentrantLock通过构造法设置是公平还非公平默认是非公平。synchroized是非公平锁
中断锁:线程a可以发出指令中断b线程,b线程也可以给自己发送中断,但是b要不要中断是自己判断的,synchroized是不可中断的 lock是可中断
读锁和写锁