【发布时间】:2020-02-21 15:34:08
【问题描述】:
我有一些线程正在同一个 MulticastSocket 上写入(取决于调度,可能会发生多于一个线程同时在 MulticastSocket 上写入的情况)。我是否必须通过使用某种形式的锁定让他们在每个计时器上写一个,或者 UDP 协议隐含地这样做?
【问题讨论】:
-
没有。 UDP 数据报是原子的,系统调用是原子的,
DatagramSocketImpl.send()是同步的。 -
现在我有点困惑。我是否应该像@user207421 所说的那样设置显式锁定?
-
@AlexandraBradan - user207421 指的是
MulticastSocket的特定实现(我猜,来自他的评论)使用DatagramSocketImpl.send()。你编程是为了contract,而不是实现。合同没有说它是线程安全的,所以你必须假设它不是。否则是不好的做法,是自找麻烦。如果您的代码在不同的 JDK 上运行,但实现方式不同(不同供应商的 JDK,或同一供应商的 JDK 的不同版本),则实现可能不同。
标签: java udp multicast multicastsocket