因此,如果我有一个套接字服务器,我可以接受每个套接字并将其传递给执行程序
while(true){
Socket conn = socketServ.accept();
Runnable task = new Runnable() {
@Override
public void run() {
try{
server.executor(conn);
} catch(IOException e){
}
}
};
exec1.execute(task);
}
这样做可以让我的服务器在我的线程上运行,并且不会阻塞同一线程。因为我还引用了那个名为“conn”的套接字,所以我也可以成功返回消息。
现在我有了一个 RMI 接口(interface),它基本上可以让我来回调用方法。
例如,如果我有这个方法:
public MusicServerResponseImpl CreatePlayerlist(String Name, UserObjectImpl uo) throws RemoteException {
MusicServerResponseImpl res = new MusicServerResponseImpl();
return res;
}
它返回一个可序列化的对象。我担心的是,当调用此消息时,我认为它将在服务器的主线程中被调用,因此会阻塞该线程并减慢并行性。
我认为解决方案是让每个 RMI 方法也为执行器创建一个任务..以加快所有内容的执行速度...我看到的这个问题与我有一个对象的套接字不同要发送回信息,我不确定如何从 RMI 方法返回响应,而不必以某种方式阻塞线程。
这有道理吗?基本上我问的是如何与 RMI 方法并行执行,同时仍然能够返回结果!
感谢您的帮助!
最佳答案
Does that make sense?
没有。原生支持并发调用。
参见this documentation page并查找名为 maxConnectionThreads 的属性。
您还可以通过例如在服务器代码中打印当前线程名称并尝试执行并发调用并查看会发生什么来测试您的假设。
关于java - RMI服务运行方式与socket类似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55934992/