如果我有多个Java线程同时写入同一个Socket实例,会影响从同一个套接字读取的对象的完整性吗?即,对象的内容是否会被弄乱等等。对象的排序是随机的。
答案 0 :(得分:16)
一般来说,没有保证。不同对象的比特很可能最终在线上交错,使结果难以辨认。 因此,您需要提供外部同步。
值得注意的是,即使是OS级别的单个套接字写入也不一定是原子的。有关进一步的讨论,请参阅Is it safe to issue blocking write() calls on the same TCP socket from multiple threads?和Be careful with the sendmsg() family of functions。
答案 1 :(得分:5)
如果我有多个Java线程写入同一个Socket实例 同时
您将从多个主题写入相同的OutputStream
是什么让你认为没有同步是一个好主意?如果您开始同时从多个线程写入文件而没有同步,您是否希望该文件包含任何有意义的内容?