Итак, если у меня есть сервер сокетов, я могу принять каждый сокет и передать его исполняющему
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, который позволяет мне вызывать методы туда и обратно.
например, если бы у меня был этот метод:
public MusicServerResponseImpl CreatePlayerlist(String Name, UserObjectImpl uo) throws RemoteException {
MusicServerResponseImpl res = new MusicServerResponseImpl();
return res;
}
Который возвращает сериализуемый объект. Меня беспокоит то, что когда это сообщение будет вызвано, я думаю, что оно будет вызвано в основном потоке сервера и, таким образом, заблокирует этот поток и замедлит параллелизм.
Я думаю, что решение состоит в том, чтобы каждый отдельный метод RMI также создавал задачу для исполнителя ... чтобы ускорить выполнение всего ... эта проблема, которую я вижу, однако, отличается от сокета, где у меня есть объект для отправки информации назад, я не уверен, как вернуть ответ из метода RMI без необходимости каким-либо образом блокировать поток.
Имеет ли это смысл? В основном я спрашиваю, как я могу выполнять параллельно с методами RMI, но при этом иметь возможность возвращать результаты!
Спасибо за помощь!