上一次我们介绍了Synchronized的优化,除此之外在JDK1.5之后,也提供了另外一种锁Lock,今天我们就看看这个有什么优势
相比Synchronized,lock更加灵活,他的基本操作是通过乐观锁来实现的,但由于Lock锁也会在阻塞时候挂起,因此他依然属于悲观锁,他们之间的比较如下图
Lock实现原理
Lock锁是基于java实现的锁,Lock是一个接口,常用的类有ReentrantLock,ReentrantReadWriteLock(RRW),他们都是依赖AQS实现 AQS类结构包含一个基于链表实现的CHL,用于存储阻塞的线程,AQS还有一个state变量,他是用来表示ReentrantLock表示加锁状态.锁分离优化lock同步锁
我们知道ReentrantLock是独占锁,他是同一时刻只能有一个线程获取到做,但是我们知道,对于同一份数据进行读写,如果一个线程在读数据,一个线程在写数据,会导致数据不一致,如果一个线程在写数据