CountDownLatch原理
·
前天面哈罗问了这个,我一时不知道说啥,说了个原子类。心虚。其实我就算不知道随便说出来点也是可以的,平时能得50的东西面试就只能得0分。
虽然我之前没看过countdownlatch的原理但是我用过呀,知道它内部是有个计数器的,可以计算任务数量,countdown方法可以使任务数减一。await可以起到阻塞主线程等计数器减为0,也就是子线程执行完毕之后再执行主线程的作用。虽然不知道算不算原理,但总归是没错的,随便说几句比啥都说不出来好吧。
countdownlatch里面有个Sync的内部类继承了AQS,AQS里面有一个用voliate修饰的int值state用来计数
每调用一次countdown()方法会使用CAS的思想将state的值减一
await方法里面会调用AQS的方法
这块儿再点进去是真的看不懂了,debug了一下刚开始是个空队列,addWaiter的时候创建了两个节点,看的1.8的版本,看了一下jdk11这个方法又不一样了。p==head的时候这个时候state已经减为0了,不知道中间经历了啥,当p指向头结点这个过程state怎么变化的。然后就return了。
不想看了,太耗时间了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)