【发布时间】:2016-12-31 00:15:50
【问题描述】:
我有一个文件夹,里面有大量文件。有一个 cron 作业一次需要 10 个文件名,例如file1, file2....., file10 并创建 10 个新线程来读取这些文件。这些文件的内容被提取并转储到另一个进程中(不相关)并且文件被删除
现在的问题是,如果其中一个线程处理文件的时间超过一分钟,则 cron 作业会再次触发并再次拾取同一文件,因为它尚未删除并再次处理内容。
如果有另一个线程已经从它读取内容,有没有办法限制线程读取文件/创建文件对象。
我可以让一个同步的哈希映射存储 10 个线程当前正在处理的 10 个文件的详细信息,并在将文件分配给线程之前检查映射,但我发现很难相信没有更好的方法在 Java 中执行此操作。
【问题讨论】:
-
可以尝试移动或重命名正在处理的文件,以便下次不会被 cron 拾取
-
@Guenther - 所述线程描述 FileChannel.Lock 是每个 JVM 锁而不是每个线程锁(线程在同一个 JVM 中),因此显然不是 OP 想要的
标签: java multithreading file io