我使用的是file.deleteOnExit()
和file.exists()
以確保我的應用程序只有一個實例可以在任何給定的時間點運行。不過,我開始發現該方法的主要缺陷:替代文件鎖定以確保只能啓動一個應用程序實例
1)您可以複製鎖定文件周圍的所有文件並運行可執行文件。
2)如果JVM進程強制結束,鎖定文件不會被刪除。
什麼(除了套接字鎖定或許)將是一個很好的選擇?
編輯:
使用插座鎖定到只有一個進程工作得很好,很乾淨,但我聽說過與其他應用程序和防火牆的潛在衝突。例如,如果選擇的端口出於某種原因被另一個進程使用,我的應用程序會認爲另一個實例已經在運行 - 這就是爲什麼我想要一個替代解決方案。
是否要鎖定多線程環境的文件? –
該文件將爲空,僅用於檢查另一個實例是否已在運行。 IMO是一種天真的方法,儘管我想不出另一種沒有衝突可能性的簡潔解決方案(比如套接字綁定)。 – rtheunissen
如果應用程序。有一個GUI,使用['SingleInstanceService'](http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/javax/jnlp/SingleInstanceService.html)。 –