您的位置 首页 > 德语词汇

final countdown是什么意思、读音?多线程基础系列之 CountDownLatch

大家好,今天给各位分享final countdown是什么意思、读音的一些知识,其中也会对多线程基础系列之 CountDownLatch进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

很久以前面试大厂,被面试官问到有没有使用过CountDownLatch,我说使用过;面试官追问,那你可以说一下具体使用场景吗,脑袋一懵,竟然答不上来。是的,我背的八股文已经忘了,之前我也确实没有使用过。

final countdown是什么意思、读音?多线程基础系列之 CountDownLatch

最近碰到有一个同事错误地使用了CountdownLatch,不由的想谈一谈CountdownLatch的使用。

同步工具类,允许一个或多个线程一直等待,直到其他线程运行完成后再执行(Asynchronizationaidthatallowsoneormorethreadstowaituntilasetofoperationsbeingperformedinotherthreadscompletes.)

有了上面理解,接下来再看看应用场景

举几个实际应用用到的例子,不会使用CountDownLatch的请抄作业了。

//1.设置CountDownLatch\nfinalCountDownLatchlatch=newCountDownLatch(1);\nfinalRpcResultresult=newRpcResult();\n\n//2.发起远程RPC调用。RPC返回结果,触发callback调用,修改CountDownLatch\nremoteInvoke(getHost(requestLine),request,newCallBack(timeout){\n@Override\npublicvoidhandled(Responseresponse)throwsException{\ntry{\nResponse.Statusstatus=response.startLine();\nbyte[]bytes=response.body().bytes();\n......\nresult.setStateCode(status.code());\n}catch(Exceptione){\nresult.setCause(t);\n}finally{\n//必须放在final里面\nlatch.countDown();\n}\n}\n});\n

可以把remoteInvoke理解为线程操作。

很多框架的源码启动类,都会有异步加载过程并同步等待,就是下面这个模板代码,试着在你的工程中用一用。

finalCountDownLatchlaunchLatch=newCountDownLatch(1);\nThreadlauncherThread=newThread(()->{\ntry{\n.......\n}finally{\nlaunchLatch.countDown();\n}\n});\n.....\nlatch.await(timeout,TimeUnit.MILLISECONDS);\n多线程等

多线程等待的场景,比如并发下载,并发查询等等

finalCountDownLatchlatch=newCountDownLatch(nTasks);\nfor(inti=0;i<nTasks;++i){\nexecutorService.submit(\nnewRunnable(){\n@Override\npublicvoidrun(){\ntry{\n//业务操作method\n}finally{\nlatch.countDown();\n}\n}\n});\n}\nlatch.await();\n补充场景启动类,异步加载资源源码中的注释也有两个详细的例子三、其他补充源码浅析

内部实现一个AbstractQueuedSynchronizer(AQS队列同步器),源码并不多,主要,通过改变privatevolatileintstate值来实现线程之间的协助。state不为0继续等待,为0向下执行。调用countDown则state减一

学会慢慢的把这些工具类应用到你的工程里面,别再做CRUDboy了。

纸上得来终觉浅,绝知此事要躬行.

作者:uzong链接:https://juejin.cn/post/7307857918594334758

OK,本文到此结束,希望对大家有所帮助。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023