java io读写锁

时间:2009-11-28 05:06:40

标签: java

假设我有一个文件可能由一个线程/进程Writer写入并由另一个线程/进程Reader读取。 Writer每隔x个时间间隔更新一次文件,Reader每隔y个时间间隔读取一次, 如果他们碰巧同时读写文件,会有任何问题吗?在写完成之前,读取块会被阻塞吗?或读取失败?反之亦然? 这里最好的做法是什么?

2 个答案:

答案 0 :(得分:5)

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

Java有一个FileLock类,可用于协调对文件的访问。但是,您需要仔细阅读注意事项,尤其是与此功能的系统相关性有关的注意事项。在目标操作系统上测试功能非常重要。

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

问题是多个进程是使用该文件还是仅在单个Java进程中单独的线程是不明确的。那是的区别。如果问题只需要一个进程内的线程安全,那么ReentrantReadWriteLock可以提供强大,高性能的解决方案,而不会出现任何特定于平台的缺陷。

答案 1 :(得分:0)

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

如果你单独使用文件,你可以提出一个足够好的解决方案,但我不相信你会有一个可以被视为最佳实践的解决方案。