RMI:服务器端的线程等待

时间:2016-07-25 14:17:23

标签: java multithreading rmi

我有以下代码:

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()方法时,很明显可能存在两种情况:

  1. 队列中有消息,方法返回
  2. 队列中有no条消息,线程正在等待
  3. 这次rmi通话的第二种情况会发生什么?客户会等多久?

1 个答案:

答案 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