🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 8.有哪些常见的AQS锁 AQS分为独占锁和共享锁 **ReentrantLock(独占锁)**:可重入,可中断,可以是公平锁也可以是非公平锁,非公平锁就是会通过两次CAS去抢占锁,公平锁会按队列顺序排队 **Semaphore(信号量)**:设定一个信号量,当调用acquire()时判断是否还有信号,有就获取一个信号量,没有就阻塞等待其他线程释放信号量,当调用release()时释放一个信号量,唤醒阻塞线程。 应用场景:允许多个线程访问某个临界资源时,如上下车,买卖票 **CountDownLatch(倒计数器)**:给计数器设置一个初始值,当调用CountDown()时计数器减一,当调用await() 时判断计数器是否归0,不为0就阻塞,直到计数器为0。 应用场景:启动一个服务时,主线程需要等待多个组件加载完毕,之后再继续执行 **CyclicBarrier(循环栅栏)**:给计数器设置一个目标值,当调用await() 时判断计数器是否达到目标值,未达到就阻塞,直到计数器达到目标值 **应用场景**:多线程计算数据,最后合并计算结果的应用场景