- 浏览: 58940 次
- 性别:
- 来自: 成都
文章分类
最新评论
//在完成一组操作之前允许一个或多个线程等待内部用的AQS private static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014374L; Sync(int count) { setState(count); } int getCount() { return getState(); } protected int tryAcquireShared(int acquires) { return (getState() == 0) ? 1 : -1; } protected boolean tryReleaseShared(int releases) { // Decrement count; signal when transition to zero for (;;) { int c = getState(); if (c == 0) return false; int nextc = c-1; if (compareAndSetState(c, nextc)) return nextc == 0; } } } //先看构造函数 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); //初始化sync. this.sync = new Sync(count); } //阻塞当前线程 public void await() throws InterruptedException { sync.acquireSharedInterruptibly(1); } //阻塞指定时间超时返回false public boolean await(long timeout, TimeUnit unit) throws InterruptedException { return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout)); } //递减count.0则唤醒等待的所有线程。 public void countDown() { sync.releaseShared(1); } //获取当前计数器数量 public long getCount() { return sync.getCount(); } public String toString() { return super.toString() + "[Count = " + sync.getCount() + "]"; }
发表评论
-
读ThreadLocal源代码
2017-10-12 15:00 221//可以存取线程局部变量 //先看构造函数 pub ... -
读Exchanger源码
2017-10-10 11:38 310//用于线程间交换数据 public V exchang ... -
读Executors源码
2017-09-29 15:23 240//一个管理线程创建的类里面都是静态方法 //创建一 ... -
读ScheduledThreadPoolExecutor源码
2017-09-25 17:33 376//一个可以延迟执行的定时任务 //先看构造函数 构造函 ... -
读部分ThreadPoolExecutor源码
2017-09-25 15:27 276//线程池 //先看构造方法 public Threa ... -
读AbstractExecutorService
2017-09-23 16:34 297//他是ExecutorService的部分实现 pub ... -
读ExecutorCompletionService源码
2017-09-23 11:22 462//一个用来管理已完成任务的service,内部封装了一个 ... -
读FutureTask源码
2017-09-22 16:45 250//一个可以异步返回计算的结果 //它同时实现了Futu ... -
读ConcurrentSkipListMap源码
2017-09-21 15:11 269//数据结构是跳表 关于数据结构http://blog.c ... -
读Semaphore源码
2017-09-09 14:58 267//一个信号量,只有在池中还拥有许可时才允许线程继续执行。 ... -
读CyclicBarrier源码
2017-09-01 17:59 326//一个循环的屏障。所有的线程在屏障处等待其他线程执行完毕 ... -
读ConcurrentLinkedQueue
2017-09-01 11:40 263//这是一个无阻塞的队列没有加任何锁全部利用CAS机制实现 ... -
读ConcurrentHashMap源码
2017-08-31 11:21 253//先看构造函数 public ConcurrentHa ... -
读CopyOnWriteArrayList源码
2017-08-22 12:59 380//在该集合上的写操作都是在原有的副本上进行的操作。这样可 ... -
读LinkedBlockingDeque源码
2017-08-21 14:26 530//这是一个支持双端操作的可阻塞队列 //先看构造函数 ... -
读SynchronousQueue源码
2017-08-10 10:51 342//先看构造方法 public SynchronousQ ... -
读PriorityBlocking源码
2017-08-09 13:47 330//一个基于而为堆的优先级队列,它是无界的。 //先看构 ... -
读DelayQueen源码
2017-08-07 15:16 249//一个基于二叉堆优先 ... -
LinkedblockingQueue源码解读
2017-08-04 13:03 322//LinkedBlockQueue //先看构造函数 ... -
ArrayBlockingQueue源码解读
2017-08-03 13:53 274//先看构造函数 //初始化一个给定容量的ArrayBl ...
相关推荐
简介countDownLatch这个类使一个主线程等待其他线程执行完毕后再执行。它是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,
主要为大家详细解析了CountDownLatch源码之await方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要为大家详细介绍了Java并发系列之CountDownLatch源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要为大家详细解析了CountDownLatch源码之countDown方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
《java并发编程》中CountDownLatch和CyclicBarrier用法实例大全,几乎包含了所有重要的用法
其实我自认为CountDownLatch类是进入AQS世界一个非常好非常好的通道,因此写完这篇文章,我打算再写一篇关于CountDownLatch源码的文章。 1 原理简介 CountDownLatch原理可以用下图进行表示: 这里注意一下: 每个...
利用 CountDownLatch 类实现线程同步,而不用回调机制。详见我的博文 http://blog.csdn.net/kroclin/article/details/37956949
递减锁存器CountDownLatch的使用以及注意事项!
目录 CountDownLatch是什么? CountDownLatch如何工作? 在实时系统中的应用场景 应用范例 常见的面试题 代码样例
于是乎到现在的Hibernate、MyBatis、Spring、Spring MVC、AQS、ThreadPoolExecutor、CountDownLatch使用场景和核心源码分析。 感觉自己还是真的菜鸡,有太多框架的底层实现都不怎么了解。 当山头被一座一座攻克时,...
在网上找的一个CountDownLatch的学习demo,感觉很不错,就摘抄过来了
CountDownLatch与thread.join()的区别
NULL 博文链接:https://cpjsjxy.iteye.com/blog/2272451
CountDownLatch Demo
mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁) 1、mybatis批处理 2、数据分批量查询 3、数据分批量插入
java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf
并发编程之CountDownLatch
源码详解CountDownLatch CountDownLatch,是一种常见同步器。其实现依赖于AQS(可以参考抽象队列式同步器AQS详解) 具体来说一个经典得应用案例是,主线程等待子线程执行完毕,再进行信息汇总,退出主函数。 如下代码...
1.2 CountDownLatch概述 CountDownLatch的基本用法 2.1 创建CountDownLatch对象 2.2 await()方法 2.3 countDown()方法 实现多线程任务的同步 3.1 场景介绍 3.2 使用CountDownLatch实现同步 主线程等待多个线程完成 ...
Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用 CountDownLatch、CyclicBarrier、Semaphore这些线程协作工具类是基于AQS的,看完这篇博客后可以去看下面这篇博客,了解它们是如何实现的。 Java并发...