我有以下代码:
public interface RmiServer extends Remote{
public String getMessage()throws RemoteException;
}
public class DefaultRmiServer implements RmiServer{
private LinkedBlockingQueue<String> queue;
@Override
public String getMessage()throws RemoteException{
return queue.take();
}
...
}
当rmi客户端调用getMessage()
方法时,很明显可能存在两种情况:
no
条消息,线程正在等待这次rmi通话的第二种情况会发生什么?客户会等多久?
答案 0 :(得分:4)
Sun RMI客户端连接的提示由属性sun.rmi.transport.tcp.responseTimeout
控制,默认设置为无超时(=永远等待)。
sun.rmi.transport.tcp.responseTimeout(1.4及更高版本):
的价值 此属性表示该时间的长度(以毫秒为单位) 客户端Java RMI运行时将用作套接字读取超时 读取远程响应数据时建立JRMP连接 方法调用。因此,此属性可用于强制执行 等待远程调用结果的超时;如果这 超时到期,关联的调用将失败 java.rmi.RemoteException异常。设置此属性应该完成 然而,因为它有效地放置了鞋面 绑定任何成功的传出远程的允许持续时间 调用。最大值为Integer.MAX_VALUE,值为 零表示无限超时。默认值为零(否 超时)。
有关可用于控制RMI连接的此参数和其他参数的列表,请参阅sun.rmi Properties