2

私は Java でブロッキング ファイル ロックを実装しています。ロックを取得しようとすると、次のようなコード ブロックがあります。

while(!fileLockIsAcquired())
{
    Thread.sleep(100); //is this cool?
    tryAcquireFileLock();
}

この 100 ミリ秒という値は私には厳しすぎるように思えThread.sleep(0)ますThread.yield()。Yield は意図をよりよく伝えているように思えますが、JVM によってどのように解釈されるかを完全に理解しているかどうかはわかりません。1 つのオプションが他のオプションよりも明らかに優れているか?

このファイルは、ブロッキング ロック メソッドを持たない Web サービスを介してアクセスされるリモート ファイルであるため、ブロッキングを自分で実装する必要があります。

4

2 に答える 2

3

yield を使用すると、ポーリング レートが大幅に高くなりますが、これはおそらく望ましくありません。これが、現在のコードを受け入れ可能な最初の解決策と見なす理由です。

一方、タイムアウトの対象となる Web サービス ブロック (ロックが取得されるまで応答を延期する) を作成することもできます。これは、ロックが取得された後の迅速な対応と適度なポーリング レートの両方を実現できるため、より確実なソリューションになります。

于 2013-07-04T13:25:50.387 に答える
0

待機は他の何よりも良い選択だと思います。その理由は、他のスレッドがロックを解放したときに通知できるからです。待機の利点は、通知されるとすぐに出てくることですが、スリープはそうではありません。

于 2013-07-04T10:27:45.193 に答える