「 锁 」 八月 23, 2019
文章字数 2.4k 阅读约需 2 mins.
乐观锁认为一个线程去拿数据的时候不会有其他线程对数据进行更改,所以不会上锁。
实现方式:CAS机制、版本号机制
悲观锁认为一个线程去拿数据时一定会有其他线程对数据进行更改。所以一个线程在拿数据的时候都会顺便加锁,这样别的线程此时想拿这个数据就会阻塞。比如Java里面的synchronized关键字的实现就是悲观锁。
实现方式:就是加锁。
该锁一次只能被一个线程所持有。比如synchronized、ReentrantLock
该锁可以被多个线程所持有,比如ReentrantReadWriteLock中的读锁ReadLock
查看全文独享锁与共享锁通过AQS(AbstractQueuedSync...