私はfile.deleteOnExit()
andfile.exists()
を使用して、特定の時点でアプリケーションのインスタンスを 1 つだけ実行できるようにしています。ただし、メソッドに大きな欠陥が見られ始めています。
1) ロックされたファイルを囲むすべてのファイルを複製し、実行可能ファイルを実行できます。
2) JVMプロセスが強制終了された場合、ロックファイルは削除されません。
(おそらくソケットロック以外の) 良い代替手段は何ですか?
編集:
ソケットを使用して1つのプロセスのみにロックするとうまく機能し、非常にクリーンですが、他のアプリケーションやファイアウォールとの潜在的な競合について聞いたことがあります。たとえば、選択したポートが何らかの理由で別のプロセスで使用されている場合、アプリケーションは別のインスタンスが既に実行されていると見なします。そのため、別の解決策が必要です。