1、死锁
1.png
2.png
2、活锁:多个线程一直在执行无意义的工作,消耗资源
3.png
3、悲观锁和乐观锁
(1)Synchornize 悲观锁:先锁住再执行业务操作
(2)CAS乐观锁:先执行业务操作再判断
4、自旋锁:CAS
(1)概念:利用现代处理器都支持的CAS指令,执行时间0.6ns
(2)流程:
4.png
(3)存在的问题:ABA问题,一个线程改动过值后又改回原值,另一个线程进行CAS无法感知!(增加一个版本号进行解决~),jdk提供两个类:①AtomicMarkableReference :标记共享变量有没有被改变过;②AtomicStampedReference :标记共享变量有没有被改变过,并且被改变过几次;
(4)局限:只能保证对一个共享变量进行原子操作(解决方法:AtomicReference )
网友评论