我刚刚在 http://java.sun.com/docs/books/tutorial/rmi/implementing.html 阅读了来自 sun 的关于 RMI 的 Trail
当我运行该示例时,尽管 main 已完成,但 JVM 并未终止。 RMI 是否在内部某处生成线程?
在 main 退出后,在 main 中生成的多个线程的行为是什么? 这是一种让线程随时退出的干净方法,还是应该对生成的每个线程进行连接?我没有找到关于这个问题的任何文档。
非常感谢您的帮助!!
public class ComputeEngine implements Compute {
public ComputeEngine() {
super();
}
public <T> T executeTask(Task<T> t) {
return t.execute();
}
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "Compute";
Compute engine = new ComputeEngine();
Compute stub = (Compute) UnicastRemoteObject.exportObject(engine, 0);
Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, stub);
System.out.println("ComputeEngine bound");
} catch (Exception e) {
System.err.println("ComputeEngine exception:");
e.printStackTrace();
}
}
}
最佳答案
创建一个线程来监听套接字并回复对对象的请求。停止 JVM 的一种方法是解除服务器绑定(bind):
Registry.unbind()
并取消导出对象:
UnicastRemoteObject.unexportObject()).
关于java - 为什么使用 RMI 时 JVM 不终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078487/