Если у меня есть несколько потоков Java, пишущих один экземпляр Socket одновременно, это повлияет на целостность объектов, которые считываются из одного и того же сокета? То есть, будет ли содержимое объектов перепутано и т.д. Это прекрасно для упорядочения объектов, которые будут случайными.
Является ли Java-сокет многопоточным безопасным?
Ответ 1
В общем, гарантий нет. Биты разных объектов вполне могли бы получить чередование на проводе, делая результат неразборчивым. Следовательно, вам необходимо обеспечить внешнюю синхронизацию.
Интересно отметить, что даже одиночная запись на уровне ОС не обязательно является атомарной. Для дальнейшего обсуждения см. Безопасно ли вызывать вызовы блокировки write() одного и того же TCP-сокета из нескольких потоков? и Будьте осторожны с семейством функций sendmsg().
Ответ 2
Если у меня есть несколько потоков Java, пишущих один экземпляр Socket одновременно
Вы будете писать в один и тот же OutputStream
из нескольких потоков.
Что заставляет вас думать, что это хорошая идея без синхронизации? Если вы начали писать в файл из нескольких потоков одновременно без синхронизации, вы ожидали, что файл будет содержать что-нибудь значимое?