多线程
什么是AQS?
❒ 全称是AbstractQueuedSynchronizer,即抽象队列同步器。它是构建锁或者其他同步组件的基础框架。 ✔ status 0 无锁 1 有锁 ✔ 抢到锁的执行,抢不到排队,执行顺序先进先出 ✔ 新来的锁和队列中的第一个锁抢资源是非公平锁 ✔ 新的线程到队列中等待,只让队列中的head线程获取锁,是公平锁 AQS与Synchronized的区别 ❒ synchronized ✔ 关键字,c++语言实现 ✔ 悲观锁,自动释放锁 ✔ 锁竞争激烈都是重量级锁,性能差 ❒ AQS ✔ java语言实现 ✔ 悲观锁,手动开启和关闭 ✔ 锁竞争激烈的情况下,提供了多种解决方案。
❒ 什么是AQS? ✔ 是多线程中的队列同步器。是一种锁机制,它是做为一个基础框架使用的,像ReentrantLock、Semaphore都是基于AQS实现的 ✔ AQS内部维护了一个先进先出的双向队列,队列中存储的排队的线程 ✔ 在AQS内部还有一个属性state,这个state就相当于是一个资源,默认是0(无锁状态),如果队列中的有一个线程修改成功了state为1,则当前线程就相等于获取了资源 ✔ 在对state修改的时候使用的cas操作,保证多个线程修改的情况下原子性