0

時々 1 つのテキスト ファイルに書き込む Java プロセスがいくつかあります。これらは同じ仮想マシンのスレッドではなくjava.exe、コマンド ラインから実行されている個別のプロセスです。これらのプロセスは、同じログ ファイルに書き込みます。私たちは使用しcanWriteました...

while (!Log.canWrite()) {
    System.out.println("File: " + LogPath + " is locked, waiting...");
    Thread.sleep(2000);
}

...しかし、うまくいかないようです。次のエラーが表示されます。

The process cannot access the file because it is being used by another process) at java.io.FileOutputStream.openAppend(Native Method).

The Question:

このような状況でセマフォを整理するためのベストプラクティスは何ですか? ソリューションがリソースを消費しすぎず、全体的なパフォーマンスに大きな影響を与えないのであれば、それは素晴らしいことです。

4

1 に答える 1

3

を使用して、ファイルへのアクセスを同期できますFileChannel.lock()FileChannelから入手できますFileOutputStream

編集しかし、あなたの場合、それは問題を解決することになります。必要なのは、集中ログ サーバーです。詳細については、この質問を参照してください:集中型 Java ロギング

于 2013-01-10T16:07:10.203 に答える