ObjectOutputStream.writeObject 对文件线程安全吗?
Is ObjectOutputStream.writeObject to a file thread safe?
我正在开发一个应用程序,该应用程序必须将对象序列化为一个文件供以后使用。有多个线程同时调用方法writeObject
(对于不同的对象,同一个文件)。该方法是线程安全的吗?我必须在应用程序代码中同步写入操作吗?
例如:线程1序列化对象A,线程2序列化对象B,如果我不同步,A和B会不会在文件中混在一起?谢谢!
视情况而定。如果他们正在写入同一个文件,那么是的,这应该是同步的。但这通常即使在对象序列化之外也是如此:如果您有两个或多个线程写入同一个流,则它们需要同步。
如果他们每个人都在写自己的streams/files,那么你就没有资源冲突,而且它是线程安全的
首先,Java序列化is dangerous所以应该避免。
不,ObjectOutputStream
不是 线程安全的 。 API 似乎没有对此做出任何声明。也可以查看源码,这里为了安全只有thread-safety。
它不是 thread-hostile 所以你可以同时写入两个独立的 ObjectOutputStream
s。
来自 java.nio.file.Files.newOutputStream
的 OutputStream
是 线程安全的 但不会自动授予 "decorators".
Writer
s 有一些明确的锁定,但绝对是猪耳朵。
如果多个线程正在写入同一个文件,您必须同步写入方法,因为 ObjectOutputStream
不是开箱即用的线程安全的。您最终可能会得到混淆的结果和不同类型的线程问题。
我正在开发一个应用程序,该应用程序必须将对象序列化为一个文件供以后使用。有多个线程同时调用方法writeObject
(对于不同的对象,同一个文件)。该方法是线程安全的吗?我必须在应用程序代码中同步写入操作吗?
例如:线程1序列化对象A,线程2序列化对象B,如果我不同步,A和B会不会在文件中混在一起?谢谢!
视情况而定。如果他们正在写入同一个文件,那么是的,这应该是同步的。但这通常即使在对象序列化之外也是如此:如果您有两个或多个线程写入同一个流,则它们需要同步。
如果他们每个人都在写自己的streams/files,那么你就没有资源冲突,而且它是线程安全的
首先,Java序列化is dangerous所以应该避免。
不,ObjectOutputStream
不是 线程安全的 。 API 似乎没有对此做出任何声明。也可以查看源码,这里为了安全只有thread-safety。
它不是 thread-hostile 所以你可以同时写入两个独立的 ObjectOutputStream
s。
java.nio.file.Files.newOutputStream
的 OutputStream
是 线程安全的 但不会自动授予 "decorators".
Writer
s 有一些明确的锁定,但绝对是猪耳朵。
如果多个线程正在写入同一个文件,您必须同步写入方法,因为 ObjectOutputStream
不是开箱即用的线程安全的。您最终可能会得到混淆的结果和不同类型的线程问题。