3

私はfile.deleteOnExit()andfile.exists()を使用して、特定の時点でアプリケーションのインスタンスを 1 つだけ実行できるようにしています。ただし、メソッドに大きな欠陥が見られ始めています。

1) ロックされたファイルを囲むすべてのファイルを複製し、実行可能ファイルを実行できます。

2) JVMプロセスが強制終了された場合、ロックファイルは削除されません。

(おそらくソケットロック以外の) 良い代替手段は何ですか?

編集:
ソケットを使用して1つのプロセスのみにロックするとうまく機能し、非常にクリーンですが、他のアプリケーションやファイアウォールとの潜在的な競合について聞いたことがあります。たとえば、選択したポートが何らかの理由で別のプロセスで使用されている場合、アプリケーションは別のインスタンスが既に実行されていると見なします。そのため、別の解決策が必要です。

4

1 に答える 1

1

マルチ JVM ロックには FileChannel#lock() メソッドを使用できます。

RandomAccessFile raf = new RandomAccessFile(".lock", "rw");
FileChannel fileChannel = raf.getChannel();
fileChannel.lock();

完了したら、すべてのリソースを慎重に解放することを忘れないでください。

于 2012-12-09T04:48:49.847 に答える