Является ли Java-сокет многопоточным безопасным? - программирование
Подтвердить что ты не робот

Является ли Java-сокет многопоточным безопасным?

Если у меня есть несколько потоков Java, пишущих один экземпляр Socket одновременно, это повлияет на целостность объектов, которые считываются из одного и того же сокета? То есть, будет ли содержимое объектов перепутано и т.д. Это прекрасно для упорядочения объектов, которые будут случайными.

4b9b3361

Ответ 1

В общем, гарантий нет. Биты разных объектов вполне могли бы получить чередование на проводе, делая результат неразборчивым. Следовательно, вам необходимо обеспечить внешнюю синхронизацию.

Интересно отметить, что даже одиночная запись на уровне ОС не обязательно является атомарной. Для дальнейшего обсуждения см. Безопасно ли вызывать вызовы блокировки write() одного и того же TCP-сокета из нескольких потоков? и Будьте осторожны с семейством функций sendmsg().

Ответ 2

Если у меня есть несколько потоков Java, пишущих один экземпляр Socket одновременно

Вы будете писать в один и тот же OutputStream из нескольких потоков.
Что заставляет вас думать, что это хорошая идея без синхронизации? Если вы начали писать в файл из нескольких потоков одновременно без синхронизации, вы ожидали, что файл будет содержать что-нибудь значимое?