我想创建一个能够检测到其他自身实例并防止它们运行的应用程序。 为了实现这一点, 我正在考虑在一些应用程序特定端口打开一个新的 < code> ServerSocket , 然后依赖如果我试图多次连接到同一个端口以“ 检测” 并杀死重复应用程序实例而应该推出的例外。 我知道可以做一些事情, 比如将文件写入当前工作目录, 并“ 检测” 来完成同样的行为, 但我真的不想这样做( 如果应用程序死, 无法删除文件会发生什么? ), 因此我选择了 < code> ServerSocket 路径 。
可以说我有以下代码:
public class MyClass{
public static void main(String[] args) throws IOException{
new ServerSocket(1234);
new Thread(){
//This is a non-daemon thread. Assume its run() method never returns.
}.start();
}
}
<强问/强>
除了创建 < code> ServerSocket 之外, 我的应用程序从不需要再使用它, 因为它的存在本身就让我能够探测到另一个应用程序尝试启动的实例。 因此, 省下上述 < code> ServerSocket 的引用将导致编译警告( 未使用的引用 ) 。 我是一个整洁的错误, 所以如果我能避免它, 我宁愿不保存一个引用 。 我的问题是, 这个 < code> ServerSocket 实例是否会在所有非天线条退出前收集垃圾( 假设应用程序不失败或退出其他方式), 如果是这样, 其相关端将因此被解开?