【发布时间】:2018-01-16 09:31:14
【问题描述】:
我正在推理我的应用程序中的多播套接字线程安全。首先,我有多个线程共享同一个多播套接字实例,这个多播套接字用于加入同一端口上的不同组。以下是我的问题:
- 我是否必须同步对
joinGroup()和leaveGroup()方法的调用? - 我是否必须同步调用
send()和receive()方法,这些方法总是使用新的数据报包作为参数?
这是第二个问题的代码示例:
/* SEND METHOD EXAMPLE. */
DatagramPacket sndPckt = new DatagramPacket(buf, buf.length, groupAddr,port);
try{
multicastSocket.send(sndPckt);
} catch (IOException e) {
/* Error handling. */
}
/* RECEIVE METHOD EXAMPLE. */
DatagramPacket recv = new DatagramPacket(buf, buf.length);
try{
multicastSocket.receive(recv);
} catch (IOException e) {
/* Error handling. */
}
我找到了this answer,但它谈到使用相同的Datagram Packet。
我还测试了我的应用程序,但没有发现任何竞争条件或不一致,但我不能 100% 确定使用是线程安全的。
【问题讨论】:
-
文档对这些方法的线程安全有什么看法?
-
@Kayaman 什么都没有?
-
你说得对,小蚱蜢。
-
有时文档说明了很多,但它什么也没说。其他时候则相反。
-
当 EJP 和 Stephen C 都参与其中时,您会得到一些 A 级答案。更不用说他们同意了!
标签: java multithreading thread-safety multicast