跳到主要内容

简述AQS 对资源的共享方式?

参考答案:

AQS(AbstractQueuedSynchronizer)是Java中的一个抽象类,用于构建锁或其他同步组件的基础框架。它定义了两种资源共享方式:

  1. 独占(Exclusive):在这种模式下,资源一次只能被一个线程访问。例如,ReentrantLock就是基于这种方式的锁。独占模式可以进一步分为公平锁和非公平锁。

    • 公平锁:线程按照它们在队列中的顺序获取锁,先请求的线程先获得锁。
    • 非公平锁:线程在获取锁时不会考虑队列顺序,而是直接尝试获取锁,谁先获取到就是谁的。
  2. 共享(Share):在这种模式下,多个线程可以同时访问资源。例如,Semaphore和CountDownLatch就是基于这种方式的同步工具。

    • 共享锁允许多个线程同时读取共享资源,但在写入共享资源时,仍然需要独占模式。

AQS使用CLH队列结构来管理等待获取资源的线程。每个请求共享资源的线程都被封装成一个Node节点,并加入到CLH队列中。当资源可用时,队列头部的线程会获取资源并执行相应的操作。如果资源不可用,线程则会在队列中等待,直到资源可用。

总的来说,AQS提供了独占和共享两种资源共享方式,以适应不同的同步需求。开发者可以根据具体场景选择合适的同步方式,并基于AQS构建自定义的锁或同步组件。