DatagramSocket.send 线程安全吗?

Posted

技术标签:

【中文标题】DatagramSocket.send 线程安全吗?【英文标题】:is DatagramSocket.send thread safe? 【发布时间】:2013-05-11 14:38:21 【问题描述】:

我打算使用DatagramSocket 的实例并从不同的线程调用它的send 方法...将UDP 数据包发送到不同的客户端。方法线程是否安全,即从不同线程调用此方法不会产生任何麻烦/不一致/竞争条件?

谢谢!

【问题讨论】:

【参考方案1】:

是的。这只是原生操作系统上的一个薄层,是线程安全的。

请看这里http://www.velocityreviews.com/forums/t150685-is-datagramsocket-thread-safe.html

【讨论】:

我看到了这个,但这缺少参考! 没错。这只是我从 2006 年开始参与的 Sun Java 论坛主题的副本。不是规范性参考。【参考方案2】:

UDP 保证数据报完好无损(如果有的话)。换句话说,即使发送方存在多线程,也不可能存在交错。这就是你所需要的。您实际上并不需要线程安全。然而,C send() 系统调用是线程安全的,就像所有系统调用一样,因为它们是原子的。

【讨论】:

但它真的保证java包装器是线程安全的吗?我认为 - 不。 @turbanoff 包装器是否是线程安全的无关紧要,因为它没有指定更改任何对象的任何状态。 我不明白你的论点。例如,未指定 SimpleDateFormat 来更改任何对象中的任何状态。但每个人都知道 - 它不是线程安全的。 @turbanoff 所以它会改变自己的状态。否则它将是线程安全的。根据定义。【参考方案3】:

答案是肯定的,原生操作系统上的层是线程安全的。

但是,由于网络吞吐量有限,如果您发送的数据包超出网络的处理能力,则会丢弃一些数据包。

【讨论】:

所以............它是线程安全的吗?在这个答案部分有相互矛盾的答案。 是的,它是线程安全的。但是,由于网络吞吐量有限,如果您发送的数据包超出网络的处理能力,则会丢弃一些数据包。但这与多线程无关。好吧,不是直接的。

以上是关于DatagramSocket.send 线程安全吗?的主要内容,如果未能解决你的问题,请参考以下文章

java priorityblockingqueue 线程安全吗

可以从多个线程等待相同的任务 - 等待线程安全吗?

可以从多个线程等待相同的任务 - 等待线程安全吗?

mongodatabase mongocollection 线程安全吗

SecureRandom 线程安全吗?

lib 魔法线程安全吗?