Нужно ли устанавливать какое-то взаимное исключение, когда несколько потоков пишут в один MulticastSocket? - PullRequest
2 голосов
/ 25 октября 2019

У меня есть несколько потоков, которые пишут в один и тот же MulticastSocket (в зависимости от расписания, вероятно, может произойти больше, чем один поток пишет в MulticastSocket одновременно). Нужно ли заставлять их писать по одному на таймер, используя какую-либо форму блокировки, или протокол UDP делает это неявно?

1 Ответ

1 голос
/ 25 октября 2019

Это на самом деле не имеет ничего общего с UDP. Документация для MulticastSocket не говорит, что она потокобезопасна, поэтому вы не можете предполагать, что она потокобезопасна. Вы не можете знать, что он не обновляет внутренние структуры (например, исходящий буфер), которые могут быть повреждены при одновременном доступе.

Если все потоки используют один и тот же экземпляр MulticastSaocket, вы 'Я хочу убедиться, что они не вызывают одновременно его методы. Вы можете сделать это достаточно легко, синхронизировавшись с экземпляром:

synchronized (theSocket) {
    theSocket.send(/*...*/);
}
...