假设我有两个线程( threadA 和 threadB ),其中 threadA 正在从文件中读取,而 threadB 正在写入同一个文件,这里有两种方法:
// Thread A reads
java.nio.file.Files.readAllBytes(Path.get("test.txt"));
// Thread B writes
java.nio.file.Files.write(Paths.get("test.txt"), bytes);
如果两个线程同时运行会发生什么?
如果线程A开始读取,那么线程B写入文件(线程A尚未完成读取),线程A会读取原始文件(线程B修改之前)或修改后的文件还是会抛出异常?
最佳答案
这不是您的问题“会发生什么”的答案,而是......
将批处理的结果写入 result.file 并“处理”它应该由单独的处理程序处理。
看看目录监视服务Watching a Directory for Changes
新的result.file.yyy-mm-dd(e.g.)写入后,或者文件被修改后,需要解析,准备好webcontent。否则,每次有人访问该页面时都会对其进行解析 - 我认为这不是那么优雅。
借助像 synchronized
这样的锁定机制可以避免“可能”的时刻。
关于java - 我们可以同时读取和写入文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521527/