博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之CountDownLatch看看笔记
阅读量:6948 次
发布时间:2019-06-27

本文共 1348 字,大约阅读时间需要 4 分钟。

hot3.png

    好吧,其实在工作中,我没有用过这个,所以你知道的,对于没用过,或者不怎用的东西,总是比较好奇,如此某些人或许就不屑一顾了吧,让我进一步想看看它是因为看了zookeeper的客户端API的使用,百度一下,第一篇就是importNew的博客,那博客写的当然比我好很多,你看看

http://www.importnew.com/15731.html 里面有不少使用的介绍

205138_P2hu_2277632.png

    因为zookeeper客户端和服务端会话的建立是一个异步的过程,它的构造方法会在处理完客户端初始化的工作就返回啦,但是一般来说,这个会话就可能是没有建立好的,所以还是没有可用的会话的,所以上面的代码设置

private static CountDownLatch connectedSemaphore = new CountDownLatch(1);

    可以看到CountDownLatch接受一个int类型的参数作为计数器,想要等待几个操作完成就传入几,当我们调用countDown方法的时候,计数器减1,CountDownLatch的await方法会阻塞当前的线程,知道N变成零,我想至于它是怎么变成0的,我们就可以自由发挥啦。上面是等待异步的watch返回会话已经建立的结果,执行countDown,然后线程就解放了。

 去Jdk的文档里面看看,开始就是这么一段描述的示例代码,让所有的work各就各位了以后,startSignal.countDown(); ,才让work去工作,真是憋得慌。

CountDownLatch有一个构造方法,一个CountDown方法,两个await方法

205158_dkcM_2277632.png

205258_kTMN_2277632.png

  await加上了时间,那么过时不候啦

205320_VP7t_2277632.png

 

从源码中可以看到,传入的int 是不能为负数的,如果是0,那这么传await是不起作用的。

205218_cF7b_2277632.png

    至于getcount就和它的名字一样,还有就是toString

     super.toString() + "[Count = " + sync.getCount() + "]";

    感觉这里面最神奇的应该是sync这个内部类啦,好多java的类喜欢这么搞,看来接下来我的智商就抓鸡啦。开头的两个注释也挺有趣,我理解的是用了AQS做了同步控制(希望高手解答),还可以看到继承了AbstractQueuedSynchronized,直白就是抽象队列同步吧,点开来都是看不太懂的东西(值得下回好好学习下)

    205349_4yIi_2277632.png

 然后赋值给内部类中sync中的state,其实state是在SQA中定义的,类型是

volatile,这种类型是线程可见,但还是无法保证数据更改读取的。这里主要重写了AbstractQueuedSynchronized的两个方法tryAcquireShared和tryReleaseShared,在AbstractQueuedSynchronized定义的是抛出异常UnsupportedOperationException。这边减去1的时候,用了compareAndSetState.

205434_FwAX_2277632.png

  据说这是一个高效,厉害的原子操作,下回学习下,今天就写到这吧,困!

205450_6y1N_2277632.png

 

图片带有微信标志,是因为我先发的微信个人公众号,然后复制过来

转载于:https://my.oschina.net/u/2277632/blog/1511391

你可能感兴趣的文章
Spring AOP 实现原理
查看>>
肠子的小心思(三):通往消化道的入口也很神奇
查看>>
服务器负载突然飙高事件
查看>>
原来还可以这样坑人的!!切勿恶作剧!
查看>>
Memcache简介
查看>>
day18--linux下gzip、bzip2、zip、xz三种压缩工具的介绍
查看>>
Oracle 删除主键
查看>>
虚拟与现实,关于世界的本质
查看>>
如何在Scala中使用条件表达式 .
查看>>
ubuntu12.04——samba中的windows、linux用户名关系
查看>>
ruby on rails 多图上传
查看>>
MySQL 的 LIKE 查詢區分大小寫
查看>>
Unity HoloLens开发配置
查看>>
vim剪贴板小结
查看>>
Thinkpad ACCESS CONNECTIONS异常解决
查看>>
各行业对邮件服务器需求及解决方案
查看>>
linux软件管理与使用
查看>>
qt 使用样式设置渐变色背景
查看>>
ubuntu16.04 安装 操作 redis
查看>>
IIS启动网站出错的几个解决方法
查看>>