CountDownLatch的介绍
CountDownLatch是JUC中的一个同步工具类,它可以帮助我们实现线程之间的同步和协作。它的核心思想是通过计数器来控制线程的执行顺序。当计数器的值降为0时,所有等待的线程都会被唤醒,然后开始执行下一步操作。
1 // Sync 类继承自 AbstractQueuedSynchronizer,提供了共享锁的功能 2 private static final class Sync extends AbstractQueuedSynchronizer { 3 4 // 构造方法,设置初始计数值 5 Sync(int count) { 6 // 使用 AQS 的 setState 方法来设置同步器的状态,这里用 count 来初始化状态 7 // 计数值即锁的可用次数 8 setState(count); 9 } 10 11 // 获取当前的计数值(即剩余的共享资源数量) 12 int getCount() { 13 // 调用 AQS 的 getState 获取当前状态,即共享资源的剩余数量 14 return getState(); 15 } 16 17 // 试图以共享模式获取锁(acquireShared),即检查是否可以获取共享资源 18 protected int tryAcquireShared(int acquires) { 19 // 状态为0时,返回为1,表示资源获取成功。返回为-1时,表示资源不可用,线程需要挂起等待。 20 return (getState() == 0) ? 1 : -1; 21 } 22 23 // 试图以共享模式释放锁(releaseShared),即释放一个共享资源 24 protected boolean tryReleaseShared(int releases) { 25 for (;;) { // 循环尝试,直到成功 26 // 获取当前的状态值(即共享资源数量) 27 int c = getState(); 28 29 //如果当前状态(即共享资源的数量)为 0,表示已经没有共享资源可以释放,因此返回 false,表示释放操作失败。 30 if (c == 0) 31 return false; // 没有资源,返回 false 32 33 // 计数器的值减1 34 int nextc = c - 1; 35 36 // 尝试更新状态(使用 CAS 操作) 37 if (compareAndSetState(c, nextc)) { 38 // 如果计数器的值减为0,说明所有线程已经执行完毕,返回 true,否则返回false。 39 return nextc == 0; 40 } 41 } 42 } 43 }
标签:getState,return,int,介绍,共享资源,线程,CountDownLatch From: https://www.cnblogs.com/hld123/p/18579023