AQS底层原理分析
juc 1)synchronized实践中的问题: 锁的获得、锁的释放,不够灵活--》Lock的出现 2)Lock是一个接口: 意味着这是一个标准,有很多种实现。 重入锁,读写锁。 3)ReentrantLock: 重入的含义:获得锁时,再次去获得锁,只用记录次数就行,而不会阻塞。 synchronized 和 ReentrantLock 重入是为了解决死锁问题的。 4) AQS Sync 公平锁 非公平锁 5)ReentrantLock重入互斥锁 6)ReentrantReadWriteLock: 只是读的话,是不需要加锁的。 读多写少时可以提升性能。 只有读的时候,不会阻塞。 而A线程在写,B线程想去读取的时候,就会阻塞。 原因是: 必须保证B获取到的值是A写入的值。 写写、读写 就会互斥。 而 读读是不会互斥的。 7)ReentrantLock的实现: 当一个线程竞争锁的时候,其它线程怎么办? 按照我们之前的理解,必然是阻塞。那么如何实现的? 同步队列。 8)AQS有2种功能: 独占: 独占是互斥。 共享: 共享就是读写锁。 9)AQS的基本实现: 维护了一个双向链表。线程竞争失败时,被封装为Node(pre、next)节点加入,Node就是抢占锁失败的线程。 10)锁的基本要素: jvm层面的CAS,调用unsafe层面的东西 11)非公平锁: 允许插队 公平锁: