adrão de design para manipular uma resposta assíncrona em Ja

Li respostas de perguntas e respostas semelhantes

Como você cria uma solicitação HTTP assíncrona em JAVA? | Padrão de design de programação assíncrona |
AsyncTask Android - Padrão de design e valores de retorno

Vejo muitas soluções, mas nenhuma me satisfa

Listener way

uando os resultados são capturados, o processamento é implementado no método onResul

public interface GeolocationListener {
public void onResult(Address[] addresses);
public void onError(Exception e);
}

Esta solução não me satisfaz, porque quero lidar com os resultados no método principal. Odeio essa interface porque, quando a resposta é retornada, ela é processada no onResult, resultando em cadeias de processamento e não há como voltar ao método "principal".

A maneira servlet

public class SignGuestbookServlet extends HttpServlet {

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
        // ...
        resp.sendRedirect("/guestbook.jsp");
    }
}

Não há código Java exposto chamando o servlet. Toda a configuração é feita no web.xml

Do jeito que eu quero

Aguarde a resposta como esta

Response a = getResponse();
// wait until the response is received, do not go further
// process
Response b = getResponse();
// wait until the response is received, do not go further
process(a,b);

Existe um padrão de design para lidar com a solicitação assíncrona e aguardar a resposta como acima? Outro caminho que não o ouvinte. Por favor, nenhuma biblioteca ou estrutura.

EDITA Obrigado até agora as respostas. Eu não lhe dei a imagem completa, então expus a classe Geolocation que iniciei a implementação. Não sei como implementar o método. Alguém pode mostrar "como fazer"? Ele (ela) também deve implementar o ouvinte para recuperar os resultados

private Address getFullAddress (String text, AddressListener listener, ... ){

    // new Geolocation(text, listener, options).start() 
    // implements Geolocation.GeolocationListener   
    // how to return the Address from the onResult ?
}

questionAnswers(5)

yourAnswerToTheQuestion