假设我有一个文件,它可能由一个线程/进程写入器写入,而由另一个线程/进程读取器读取。Writer每x时间间隔更新一次文件,Reader每y时间间隔读取一次,如果他们同时读取和写入文件,会有什么问题吗?读操作会一直阻塞到写操作完成吗?或者读取会失败?反之亦然?这里的最佳实践是什么?
发布于 2009-11-28 13:34:13
您需要设计自己的锁定协议以在应用程序中实现。具体细节取决于底层操作系统,但通常情况下,没有什么能阻止一个进程读取文件,即使另一个进程正在向该文件写入文件。
Java有一个FileLock类,可以用来协调对文件的访问。但是,您需要仔细阅读说明,尤其是与此功能的系统依赖性相关的说明。在目标操作系统上测试该功能非常重要。
Java的FileLock的一个关键概念是它只是一个“咨询”。您的进程应该能够检测到另一个进程持有对文件的锁定,但是您的进程可以忽略它,并对文件执行它喜欢的任何操作,没有任何限制。
这个问题并不明确,是多个进程将使用该文件,还是仅在单个Java进程中使用单独的线程。这是一个很大的区别。如果问题只需要单个进程中的线程安全,则ReentrantReadWriteLock可以提供健壮的、高性能的解决方案,而不会出现任何特定于平台的陷阱。
发布于 2009-11-28 15:56:55
最佳实践是不要将文件用于进程之间的通信。文件不是为此目的而设计的。相反,您应该使用为进程之间的通信而设计的消息传递。您还可以使用文件来审核已发送/接收的内容,
如果你单独使用文件,你可以提出一个足够好的解决方案,但我不相信你会有一个可以被认为是最佳实践的解决方案。
https://stackoverflow.com/questions/1811634
复制相似问题