不明白countDownLatch.countDown()为什么是放在监听回送端口前而不是后
来源:3-7 案例实操-局域网搜索案例-3
alexnest3882392
2019-03-27
CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。
如果这样理解的话,countDownLatch.countDown()放在ds = new DatagramSocket(listenPort)之前,那不是意味着还没监听端口就已经清0了,就执行发送广播了吗,摆在ds = new DatagramSocket(listenPort)之后才算是已经执行完监听动作再发送广播?老师,我对CountDownLatch在哪里产生了误解?
写回答
1回答
-
你是说的这里吧?
在这里的确可以如你所说放到:
ds = new DatagramSocket(listenPort)
之后进行,这里没有这么做,其实最初考虑的时候并非是一定考虑进入到端口监听时,而是考虑的线程同步,至少满足线程已启动后主线程才继续往下走的目的。
其实就算我们调用了.countDown();也并不会导致主线程立即唤醒,这还需要等待CPU的调度以及状态的恢复才行。
当然还包括了我们需要发送广播,再通过网卡发送的过程,这个时间基本上CPU只要没毛病几乎都会进入到监听阶段。
当然这里并不保证一定会优先进入到监听阶段才发送出去广播,所以你上面的提议的确是正确的。非常不错。
谢谢你的提议,后续我会纳入到优化代码中去。
祝课程学习愉快~
122019-03-27
相似问题