Java RMI:正在服务器端等待的线程
我有以下代码:Java RMI:正在服务器端等待的线程,java,multithreading,rmi,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(
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();
}
...
}
公共接口RmiServer扩展远程{
公共字符串getMessage()引发RemoteException;
}
公共类DefaultRmiServer实现RmiServer{
专用LinkedBlockingQueue队列;
@凌驾
公共字符串getMessage()引发RemoteException{
返回队列。take();
}
...
}
当rmi客户端调用getMessage()
方法时,很明显,可能有两种情况:
消息,线程正在等待
第二种情况下,rmi呼叫会发生什么?客户端将等待多长时间?Sun RMI客户端连接的超时由属性
Sun.RMI.transport.tcp.responseTimeout控制,该属性默认设置为无超时(=永远等待)
sun.rmi.transport.tcp.responseTimeout(1.4及更高版本):
价值
此属性表示事件发生的时间长度(以毫秒为单位)
客户端Java RMI运行时将用作服务器上的套接字读取超时
读取远程服务器的响应数据时已建立JRMP连接
方法调用。因此,此属性可用于强制
等待远程调用结果时超时;如果这
超时过期时,关联的调用将失败,并出现错误
java.rmi.RemoteException。设置此属性时应使用
然而,由于它有效地设置了一个上限
绑定到任何成功传出远程服务器的允许持续时间
调用。最大值为Integer.MAX_值,值为
零表示无限超时。默认值为零(否)
超时)
有关可用于控制RMI连接的此参数和其他参数的列表,请参阅Sun RMI客户端连接的超时由属性Sun.RMI.transport.tcp.responseTimeout控制,该属性默认设置为无超时(=永远等待)
sun.rmi.transport.tcp.responseTimeout(1.4及更高版本):
价值
此属性表示事件发生的时间长度(以毫秒为单位)
客户端Java RMI运行时将用作服务器上的套接字读取超时
读取远程服务器的响应数据时已建立JRMP连接
方法调用。因此,此属性可用于强制
等待远程调用结果时超时;如果这
超时过期时,关联的调用将失败,并出现错误
java.rmi.RemoteException。设置此属性时应使用
然而,由于它有效地设置了一个上限
绑定到任何成功传出远程服务器的允许持续时间
调用。最大值为Integer.MAX_值,值为
零表示无限超时。默认值为零(否)
超时)
有关可用于控制RMI连接的此参数和其他参数的列表,请参见默认情况下的“永远”。如果您希望使此api更为健壮,我建议实现一种方法,该方法需要“长等待时间”,允许客户端控制他们愿意等待的时间(而不是依赖RMI超时,它是默认情况下是永久的。如果您想让它成为一个更健壮的api,我建议实现一个方法,它需要一个“长等待时间”,允许客户端控制他们愿意等待的时间(而不是依赖rmi超时,它是jvm的一个“全局”值)。