DirectoryStreamのドキュメントは明確に述べて:反復処理DirectoryStreamと同時に、ディレクトリの内容を変更
イテレータが弱一貫性です。スレッドセーフですが、反復処理中に がディレクトリをフリーズしないため、 が作成された後にディレクトリに の更新が反映される(または反映されない)可能性があります。
私のマシンでは、デバッグモードのディレクトリで単純な反復処理を実行しました。反復が完了する前に、私は実行を破って、反復されるディレクトリにファイルを追加して再開しました。繰り返しは、追加ファイルを見ませんでした。
私の質問:どのような状況の下でこれはディレクトリ内容の更新を反映していますか? 残念なことに、正式な文書はそれについて非常に曖昧です。最小限にする。
わかりませんが、私はそれを読んだり、それは非決定論的であり、根底にあるOS/FSや特定の実装に依存している可能性があります。私の推測では、イテレータが指している現在のディレクトリよりもツリーの後ろにあるinodeにディレクトリがある場合は、更新が反映されます。 この現象を引き起こす方法私は知らない。私は、純粋なJavaを使用して(決定論的な方法で)即座に可能ではないと言うことに自信を持っています。 –