17

如果我有多个 Java 线程同时写入同一个 Socket 实例,这会影响从同一个套接字读取的对象的完整性吗?即对象的内容是否会被弄乱等。对象的顺序可以是随机的。

4

2 回答 2

16

一般来说,没有任何保证。不同对象的位很可能最终在电线上交错,使结果难以辨认。因此,您需要提供外部同步。

有趣的是,即使是操作系统级别的单个套接字写入也不一定是原子的。有关进一步讨论,请参阅从多个线程在同一个 TCP 套接字上发出阻塞 write() 调用是否安全?并且要小心 sendmsg() 系列函数

于 2012-11-24T21:03:18.933 回答
5

如果我有多个 Java 线程同时写入同一个 Socket 实例

OutputStream您将从多个线程写入相同的内容。
是什么让您认为没有同步是个好主意?如果您开始同时从多个线程写入文件而没有同步,您是否希望该文件包含任何有意义的内容?

于 2012-11-24T21:21:11.403 回答