为什么使用RMI时JVM不会终止

Flo*_*Flo 2 java multithreading rmi

我刚刚在http://java.sun.com/docs/books/tutorial/rmi/implementing.html上阅读了来自sun的RMI上的Trail

当我运行该示例时,尽管main已完成,但JVM不会终止.RMI是否在内部产生线程?

主要退出后,main中生成的多个Thread的行为是什么?它是一种干净的方式让线程随时退出,或者你应该在你生成的每个线程上进行连接?我没有找到关于这个问题的任何文件.

非常感谢您的帮助!!

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Kar*_*och 6

创建一个线程来监听套接字并回复对象的请求.停止JVM的一种方法是取消绑定服务器:

Registry.unbind() 
Run Code Online (Sandbox Code Playgroud)

和取消导出对象:

UnicastRemoteObject.unexportObject()). 
Run Code Online (Sandbox Code Playgroud)