java并发之CountDownLatch-创新互联

CountDownLatch

CDL 本质上是类似于信号量,而Semaphore 是每次发射一个信号 变回执行一个线程(取决于公平非公平)

创新互联公司提供成都网站建设、网站建设、网页设计,成都品牌网站建设广告投放平台等致力于企业网站建设与公司网站制作,10余年的网站开发和建站经验,助力企业信息化建设,成功案例突破上千家,是您实现网站建设的好选择.

而CDL 是将所有的信号消耗完成 才开始;

官方案例Driver实现了多线程的同步 执行 以及对主线程的通知!

Cdl 内部Sync 依然继承制AQS,但是他没有公平和非公平而言 因为他的目的是一起执行完成!

await

实际调用的是Sync中

protected int tryAcquireShared(int acquires) {return (getState() == 0) ? 1 : -1;
        }

当state==0时 那么和正常线程没有任何区别 也不会加入到队列 -1 会加入到队列

而Sync 初始化时就会给state设置状态量 那么 所以开始调用await 会将线程加入到队列并且park

在SYnc中有释放方法:

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;
            }
        }

每次释放量为1 并且知道释放0时表示成功

countDown

每次释放数量为1 ,释放一次 并不会让队列中的线程unpark 因为必须等待所有的都释放 也就是state=0时 才会开始执行

总结

CDL 的作用是是控制一组线程的并发 以及对多线程完成对主线程的通知

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:java并发之CountDownLatch-创新互联
链接地址:http://azwzsj.com/article/djdohg.html