八月 23, 2019

并发编程之锁

文章字数 2.4k 阅读约需 2 mins.

乐观锁

乐观锁认为一个线程去拿数据的时候不会有其他线程对数据进行更改,所以不会上锁。

实现方式:CAS机制、版本号机制

悲观锁

悲观锁认为一个线程去拿数据时一定会有其他线程对数据进行更改。所以一个线程在拿数据的时候都会顺便加锁,这样别的线程此时想拿这个数据就会阻塞。比如Java里面的synchronized关键字的实现就是悲观锁。

实现方式:就是加锁。

排他锁

该锁一次只能被一个线程所持有。比如synchronized、ReentrantLock

共享锁

该锁可以被多个线程所持有,比如ReentrantReadWriteLock中的读锁ReadLock

独享锁与共享锁通过AQS(AbstractQueuedSync...

查看全文
0%