AQS AbstractQueuedSynchronizer

AbstractQueuedSynchronizer抽象队列同步器
1.6之后首先是偏向锁,如果有其他线程对它进行征用,
会升级为轻量级锁,轻量级锁实现多数是自旋锁(spin lock),
如果有个线程旋了10次(不确定)仍然没有拿到锁,
升成重量级锁,悲观锁。
reentrantlock可重入锁    底层AQS
jdk1.5对synchronized进行了优化,怎么进行的优化,就是偏向锁、轻量级锁、重量级锁
synchronized OS
lock 不用OS
CAS:CompareAndSetState
乐观锁:每次获取数据的时候,都不会担心数据被修改,所有每次获取数据的时候都不会进行加锁,
但是在更新数据的时候需要判断数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新,
如果数据没有被其他线程修改,则进行更新。一般使用CAS操作方式。

乐观锁使用场景

      比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

悲观锁

        每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。在Java中,synchronized的思想也是悲观锁

悲观锁使用场景

       比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

CAS一直自旋消耗cpu,但是synchronized的wait不消化cpu,
所有CAS更偏向于应用在并发不激烈,只需自旋几次就可以拿到这把锁。


全部评论

相关推荐

ResourceUtilization:差不多但是估计不够准确,一面没考虑到增长人口,另一方面也没考虑到能上大学的人数比例,不过我猜肯定只多不少
点赞 评论 收藏
分享
05-28 23:26
河南大学 Java
双非本,刚学完Redis,项目只有外卖和点评,八股没准备,算法只有lqb省一,感觉敲的项目也是一言难尽没怎么吸收。怎么你们都有实习了
大牛之途:27急个锤子,你投日常实习最好的时间就是9,10月份,那时候暑期实习都结束了,正是缺人的时候。这份日常又能给你的暑期实习增加竞争力,暑期找的好了秋招也不怕了,都是环环相扣的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务