繁体   English   中英

java io读写锁

[英]java io read and write lock

假设我有一个文件,该文件可能由一个线程/进程Writer写入而由另一个线程/进程Reader读取。 Writer每隔x个时间间隔更新一次文件,Reader每隔y个时间间隔读取一次文件,如果碰巧同时读取和写入文件,会不会有问题? 读取将一直阻塞直到写入完成? 还是读取失败? 反之亦然? 这里的最佳做法是什么?

您需要设计自己的锁定协议以在应用程序中实现。 具体细节取决于底层操作系统,但是通常,即使另一个进程正在向文件写入文件,也不会阻止该进程读取文件。

Java具有FileLock类,可用于协调对文件的访问。 但是,您需要仔细阅读警告,尤其是与该功能的系统依赖性有关的警告。 在目标操作系统上测试功能非常重要。

Java的FileLock一个关键概念是它只是“建议”。 您的进程应该能够检测到另一个进程对该文件持有锁定,但是您的进程可以忽略它,并且可以对文件执行所需的操作,没有任何限制。

问题是多个进程将使用该文件,还是仅在单个Java进程中使用单独的线程,这是不确定的。 那是很大的不同。 如果问题只需要在单个进程中确保线程安全,则ReentrantReadWriteLock可以提供可靠,高性能的解决方案,而无需任何平台特定的陷阱。

最佳实践是不要在进程之间使用文件进行通信。 文件不是为此目的而设计的。 相反,您应该使用为流程之间的通信而设计的消息传递。 您还可以使用文件来审核已发送/接收的内容,

如果仅使用文件,则可以提出一个足够好的解决方案,但是我不认为您会有一个可以视为最佳实践的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM