シミュレーションの場合、再現可能な結果が得られないため、リアルタイムでシミュレートしようとはしません。つまり、シミュレーションをテストできません。
代わりに、データ駆動型のシミュレートされたクロックを使用して、すべてを可能な限り高速に実行します。これにより、再現可能な結果が得られ、リアルタイムよりも高速にシミュレートできます (例: 2 倍から 100 倍高速)。
スレッドの疑いがあると、約 10 マイクロ秒かかります。これより短い時間だけスレッドを中断しようとしても意味がありません。
ビジー状態で短時間待機するには、試すことができます。
long start = System.nanoTime();
while(start + delay >= System.nanoTime());
注:@ EugeneBeresovskyがコメントしているように、マシンが292年間実行された後、これはオーバーフローする可能性があるため、これを次のように書くことを選択できます
while(System.nanoTime() - start < delay);
これは、代わりに 292 年未満の遅延に対しては問題ありません。より長い遅延には System.currentTimeMillis() を使用できます。
ただし、Centos 5.x では System.nanoTime() に最大 300 ns かかるため、これを 2 回呼び出すと 100 ns よりもはるかに長くかかるため、これでも信頼できません。また、多くの OS の分解能は 1000 ns (1 マイクロ秒) しかないため、このループは、探している遅延に関係なく、最大 1 マイクロ秒まで待機します。
代わりに、最適化されていない短いループでビジー待機することができます。
100 ns の遅延の場合、別のビジー ループを作成するのではなく、待機しているものをビジー待機する方がよいと思います。