java : jdk9.01
os : linux Red Hat 4.8.5-11

Javaのコードで他のプログラムの出力するファイルのチェックを数秒毎にチェックし、
存在を確認できたら次に進むというコードを書こうとしています。

int n = 0;
boolean flag = false;
while (flag == false) {
    TimeUnit.SECONDS.sleep(waitsec);
    flag = Files.exists(path);
     n += 1;
     if (n > limit) {
         System.out.println("limit over");
     }
}

上のような感じで書いているのですが
ところがファイルが出力されているはずなのにflagがtrueになりません。
trueが帰ることもあるのですがタイミングがバラバラだったりします。
lsコマンドなどで自分で存在を確認すると
そのとたんにFiles.existsでもtrueが帰ります。

理由は分かりませんが、シュレディンガーの猫のような感じです。
自分で見つけた解決策としてはFiles.findを使えばなんとかなるのですが
Files.existsがなぜうまく作用しないのか理由がしりたいと考えています。

原因がわかる方がいましたら、ご教授お願いします。