如何终止并退出RMI服务程序的运行

最近做了一个RMI服务程序,Demo开发时候,发现,RMI服务程序总是无法终止退出运行,偶的JAVA很菜,郁闷啊!!!

IBM开发者网站找到的答案:

原文地址:http://www.ibm.com/developerworks/cn/java/j-rmiframe/
关闭RMI服务

您需要一个彻底的方式来关闭服务器而不要管正在处理的请求。因为RMI 运行时包含从不结束的线程,所以结束 RMI 服务器的唯一的方式是计划性的使用一个系统退出方法或是使用一个操作系统清除。后者是最粗野的,而且要求手工的干预。

关闭 RMI 服务器的得体的方式是用一个关闭方法。但是,如果关闭方法仅结束 Java Virtual Machine,那么该方法的返回消息从不会返回客户机。更好的方式是启动一个关闭线程。该线程休眠大约两秒的时间来给线程的返回消息一个清除虚拟机的机会,然后发出
System.exit(0).

 

public class HelloServer  implements Runnable {
    public static Registry registry = null;
    private static boolean runFlag = true;
    public static void main(String args[]) {
        new HelloServer().run();
    }
    public static void stop() throws RemoteException{
        runFlag = false;
    }
    @Override
    public void run() {
        try {
            //创建一个远程对象
            IHello rhello = new HelloImpl();
            //本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上
            registry = LocateRegistry.createRegistry(8888);
            //把远程对象注册到RMI注册服务器上,并命名为RHello
            Naming.bind("rmi://localhost:8888/RHello",rhello);
            System.out.println(">>>>>INFO:远程IHello对象绑定成功!");
            while(runFlag){
             ;
            }
            registry.unbind("RHello");
            UnicastRemoteObject.unexportObject(registry, true);
            System.out.println(">>>>>INFO:服务停止!");
            System.exit(0);  //终止RMI服务程序的运行
        } catch (RemoteException e) {
            System.out.println("创建远程对象发生异常!");
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            System.out.println("发生重复绑定对象异常!");
            e.printStackTrace();
        } catch (MalformedURLException e) {
            System.out.println("发生URL畸形异常!");
            e.printStackTrace();
        } catch (NotBoundException e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值