1,StampedLock是做什么的?
据说它是jdk7中ReentrantReadWriteLock的增强版,是为了解决ReentrantReadWriteLock的一些不足
2,ReentrantReadWritLock有那些不足呢?
ReentrantReadWritLock我们都知道(不知道的可以自行再百度哈)是读写锁,在多线程的情况下,大多数情况下是读的操作要远远多于写的操作,因此可能导致写的饥饿问题,也就是说,读操作一直占据着CPU不释放,导致写操作频繁的超时。
3,为什么会出现写锁饥饿的问题呢?请看下面的解析
ReentrantReadWriteLock写锁是互斥的。
读和读--不互斥;读和写--互斥; 写和写--互斥
就是因为ReentrantReadWriteLock的读和写发生了互斥的情况,这个地方需要优化,所以jdk8推出了StampedLock锁来优化这块内容。
4,StampedLock的设计思路
简单的来说,就是在读操作的时候发现有写操作,会再去多读取一次。
StampedLock有两种锁:
一种是悲观锁:如果是悲观锁,读和写操作是互斥的。
一种是乐观锁:如果是乐观锁,读和写操作是不互斥的。
在查阅API时,重点关注writeLock()、tryWriteLock()、tryOptimisticRead()