CountDownLatch.countDown()方法放在哪个位置的原则?

来源:5-6 数据发送与接收并行-3

Lymanhan

2019-01-20

图片描述
图片描述

这个地方的countDown为什么放在106行,这个位置,run方法刚开始执行,listener也刚开始执行,什么都没做呢,就countdown,那在45行的时候它不就直接返回listener了吗?

写回答

1回答

Qiujuer

2019-01-20

可以往后推移一些,但是无法完全推移到进入监听阶段,因为监听是阻塞的,我们只能减少线程带来的延迟,进行等待,而无法完全等待到监听已经进入时。

至于:“感觉countDown放在while循环之前比较合适”

那是没啥差异的,因为后面的执行过程到进入阻塞前几乎是没有时间的等待的;完全取决于CPU的调度,放在前面一点,与放在完全进入阻塞前其实概率几乎没差别的,因为CPU切换完全有可能在run开始的地方也有可能在后面的任意一个位置。


这个CountDown只是为了减少线程start启动调用后系统的线程启动延迟得到解决而已,至于真正的监听操作只能看CPU的实际调度,因为在循环之前的阶段的初始化操作其实根本没啥时间消耗,如果觉得有时间消耗,完全可以把这个部分放线程的构造函数即可。


那么run方法就只有count的操作以及while循环了,就不需要初始化部分了;这是可以避免的。


谢谢对课程的支持,看的很深入;赞

1
0

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程