java-是否有有效的方法来测试RMI服务器是否已启动?

我有一个RMI客户端测试,如果RMI服务器正在运行并且可以访问.

此刻,我每隔几秒钟执行一次此测试:

try {
    rMIinstance.ping();
} catch (RemoteException e) {
    getInstanceRegister().removeInstance(rMIinstance);
}

(ping()是一个简单的虚拟RMI调用.)

如果实例处于脱机状态,则大约1分钟后

java.net.ConnectException: Connection timed out

异常,向我显示服务器处于脱机状态.

但是代码挂起一分钟,这对我们来说已经很长了. (我不想更改超时设置.)
有没有一种方法可以更快地执行此测试?

解决方法:

您可以从计时器中断线程.这有点hacky,并且会抛出InterruptedException而不是RemoteException,但它应该可以工作.

try {
    Timer timer = new Timer(true);
    TimerTask interruptTimerTask = new InterruptTimerTask(Thread.currentThread());
    timer.schedule(interruptTimerTask, howLongDoYouWantToWait);
    rMIinstance.ping();
    timer.cancel();
} catch (RemoteException | InterruptedException e) {
    getInstanceRegister().removeInstance(rMIinstance);
}

和TimerTask实现:

private static class InterruptTimerTask extends TimerTask {
    private Thread thread;

    public InterruptTimerTask(Thread thread) {
        this.thread=thread;
    }

    @Override
    public void run() {
        thread.interrupt();
    }

}
上一篇:java-如何在服务器上从客户端调用方法?


下一篇:我可以(轻松地)使用第三方库来处理Java RMI的序列化吗?