同步器可以重写的方法
方法作用protected boolean tryAcquire(int arg)这是独占式获取同步状态的方法,该方法的实现需要查询到当前的同步状态,同时做出相应判断,最后再通过CAS设置同步状态protected boolean tryRelease(int arg)这是独占式释放同步状态的方法,让那些等待获取同步状态的线程能够有机会获取同步状态protected int tryAcquireShared(int arg)这是共享式获取同步状态的方法,返回的值大于等于0,说明就获取成功了,否则,就是获取失败protected boolean tryReleaseShared(int arg)这是共享式释放同步状态的方法,让那些等待获取同步状态的线程能够有机会获取同步状态protected boolean isHeldExclusively()这个方法用来判断当前同步器是否在独占模式下被线程占用,它会取出占用的线程和当前线程做个比较,看下是否相等。AQS的关键模版方法
方法作用public final void acquire(int arg)这个方法是独占式获取同步状态的方法,该方法会调用重写的tryAcquire()方法来配合做结果判断,如果当前线程获取同步状态是成功的,该方法就会返回,如果不成功就会进入同步队列等待public final void acquireInterruptibly(int arg)和acquire()方法类似,不过它多了个响应中断的能力,当前线程未获取到同步状态,一样会进入同步队列,但是如果当前线程被中断,那就会抛出InterruptedException异常并返回public final boolean tryAcquireNanos(int arg, long nanosTimeout)在acquireInterruptibly()方法的基础上又加了超时的限制,这样可以让在规定时间内无法获取到同步器状态的线程直接返回false,当然了如果获取到则返回true。public final void acquireShared(int arg)这是共享式获取同步状态的方法,该方法会调用重写的tryAcquireShared()方法来配合做结果判断,如果当前线程获取同步状态是成功的,该方法就会返回,如果不成功就会进入同步队列等待,不过这个方法支持同一时刻可以有多个线程获取同步状态。public final void acquireSharedInterruptibly(int arg)和acquireShared()方法类似,不过它多了个响应中断的能力,当前线程未获取到同步状态,一样会进入同步队列,但是如果当前线程被中断,那就会抛出InterruptedException异常并返回public final boolean tryAcquireSharedNanos(int arg, long nanosTimeout)在acquireSharedInterruptibly()方法的基础上又加了超时的限制,这样可以让在规定时间内无法获取到同步器状态的线程直接返回false,当然了如果获取到则返回true。public final boolean release(int arg)这也是独占式的方法,用来释放同步状态,然后将同步队列中的第一个节点包含的线程唤醒public final boolean releaseShared(int arg)这也是共享式的方法,用来释放同步状态,然后将同步队列中的第一个节点包含的线程唤醒public final Collection getQueuedThreads()获取等待在同步队列上的线程集合