Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保护读取文件_Java_Multithreading_File - Fatal编程技术网

Java 如何保护读取文件

Java 如何保护读取文件,java,multithreading,file,Java,Multithreading,File,我有多个线程读取一个文件。文件路径包含一个符号链接,后台守护进程(不是java应用程序)会定期更新该链接 例如,考虑这个文件路径 /home //ME/DAT/当前/file。out < /COD>,当前< /代码>是包含文件的实际目录的符号链接,文件。out 和当前由守护进程定期更新。 Java线程只读取文件(不写入文件)。如何确保线程安全地读取文件?我正在考虑一种锁定机制,但我不能让守护进程在更新符号链接时锁定 提前谢谢。我想你不需要锁。在更新链接时不能打开该文件(除非该链接是由守护进程在中

我有多个线程读取一个文件。文件路径包含一个符号链接,后台守护进程(不是java应用程序)会定期更新该链接

例如,考虑这个文件路径<代码> /home //ME/DAT/当前/file。out < /COD>,<代码>当前< /代码>是包含文件的实际目录的符号链接,<代码>文件。out 和当前由守护进程定期更新。

Java线程只读取文件(不写入文件)。如何确保线程安全地读取文件?我正在考虑一种锁定机制,但我不能让守护进程在更新符号链接时锁定


提前谢谢。

我想你不需要锁。在更新链接时不能打开该文件(除非该链接是由守护进程在中完成的),或者可以。一旦Java应用程序打开文件进行读取(如果链接未以原子方式更新,则可能在多次尝试之后),是否移动、删除或重命名(指向该文件的符号链接)文件并不重要-Java应用程序仍将能够读取该文件,因为Linux保留了最初打开的文件(句柄/索引节点)可用于Java应用程序。

这也是为什么有时删除文件并不能释放磁盘空间的原因:某些进程仍在使用它。只有当删除文件的所有打开的文件句柄都关闭时,删除文件使用的磁盘空间才可用。

尝试以另一种方式使用lock,创建一个虚拟文件x.lock如果当前线程有权访问x.lock,让它读取该文件。修改您的demon进程以首先访问x.lock文件,然后更新。如果没有锁,请等待进程访问x.lock文件。希望这能给你一个指针