Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

前面的文章中,我们了解了Java中的Lock接口,以及相关的实现类ReentrantLock、ReentrantReadWriteLock。它们都是通过聚合一个AQS来实现的。同时讨论了为什么有了Synchronized关键字之后还要有Lock。 我们知道Synchronized关键字是Monitor机制在Java中的一种具体实现,每个对象都有wait()、notify()和notifyA...
Java

ReentrantReadWriteLock 看下它的类图 可以看到ReentrantReadWriteLock实现了ReadWriteLock接口。ReadWriteLock就是读写锁的意思,那么问题来了,为什么要有个读写锁呢?为什么要把读锁和写锁分开呢?这里就是出于对性能的考虑了,多个线程之间,可以同时读,但是不可以同时写或者一个读一个写,所以分开之后,读锁和写锁各司其职,可以提高效...
Java

AbstractQueuedSynchronizer 简写AQS, 队列同步器,是用来构建锁或者其他同步组件的基础框架,Lock接口的实现,如ReentrantLock等都有它的身影,都是通过它来实现线程同步的。从名字可以看出,首先它是个同步器,其次它里面还有个队列。 AQS使用了模板方法模式,这意味着AQS类里面大体有两种方法:需要被子类重写的涉及到具体细节的方法和模板方法,而模板方法...
Java

Lock是JUC包中的一个接口,是在synchronized关键字之后出现的,用来提供锁的功能,本文主要讨论Lock接口以及其实现类,以及为什么有了synchronized关键字了还要有Lock. synchronized作为内嵌的Java关键字,其可以隐式地获取和释放锁,它简化了同步的管理,同时也固化了锁的获取和释放,缺少灵活性。 在Java SE 5 之后,新增了Lock接口(以及相...
Java

ReentrantLock, 从名字来看,可重入锁,今天来看下它的具体实现。 特性:排他锁,内部实现了公平锁和非公平锁。 它的继承关系如下: 以及还有三个内部类:Sync, NonfairSync , FairSync.其中后两个都继承自Sync,而Sync又继承自AQS 可以看出,ReentryLock是在自己内部实现了公平锁和非公平锁的。 可以看到,ReentryLock继承...
Java