AQS(AbstractQueuedSynchronizer)是一个用于构建锁和同步器的框架,它的底层实现确实使用了 CAS(Compare-And-Swap) 来保证线程安全。但是,AQS 被称为“悲观锁”的原因主要体现在以下几个方面:

  1. 获取锁的方式:在 AQS 中,线程在获取锁时,如果锁已经被其他线程持有,当前线程会被阻塞,进入等待状态。这种阻塞的机制是典型的悲观锁特征,因为线程在尝试获取锁时假设锁会被占用。
  2. 队列机制:AQS 维护了一个 FIFO 队列,当多个线程争抢同一把锁时,后续请求的线程会被加入到队列中,等待前面的线程释放锁。这种等待机制也反映了悲观锁的特点,即在获取锁之前,线程必须做好等待的准备。
  3. 与乐观锁的对比:乐观锁通常假设在执行操作期间不会发生冲突,因此不需要加锁,而是通过版本号或其他方式在提交时验证数据的一致性。相比之下,悲观锁则认为冲突是可能的,因此在操作开始之前就进行加锁。