DirectoryStream的文档明确指出:
迭代器是弱一致的。它是线程安全的,但在迭代时不会冻结目录,因此它可能(或不可能)反映在创建DirectoryStream之后对目录的更新。
在我的机器上,我在调试模式下对目录执行了一个简单的迭代。在迭代完成之前,我中断了执行,将一个文件添加到正在迭代的目录中并继续进行。迭代没有看到额外的文件。
我的问题是:在什么情况下,迭代将反映目录内容的更新?不幸的是,正式的文档对此非常模糊。至少可以这么说。
发布于 2014-02-14 13:55:39
这些文件故意含糊不清。JVM必须在许多不同类型的机器上运行: Windows和Unix衍生工具。不同的文件系统有不同的行为。如果你想让你的程序在不止一台计算机上可靠地工作,你必须(重复一遍,必须)为最坏的情况设计。
“最不惊讶”法则建议,您应该使用整个DirectoryStream来获取快照(或非常接近一个快照),遍历快照,然后重新启动流。然后,您可以比较快照的不同版本,以确定对基础目录的更改。
https://stackoverflow.com/questions/18131941
复制相似问题