Patrón de diseño para manejar una respuesta asincrónica en Java

Leí respuestas de preguntas y respuestas similares

¿Cómo se crea una solicitud HTTP asincrónica en JAVA? | Patrón de diseño de programación asíncrono |
AsyncTask Android - Patrón de diseño y valores de retorno

Veo muchas soluciones, pero ninguna realmente me satisface.

Forma de escucha

na vez que se obtienen los resultados, el procesamiento se implementa en el método onResult.

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

Esta solución no me satisface, porque quiero manejar los resultados en el método principal. Odio esta interfaz porque cuando se devuelve la respuesta, se procesa en onResult, lo que genera cadenas de procesamiento y no hay forma de volver al método "principal".

La forma del servlet

public class SignGuestbookServlet extends HttpServlet {

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

No hay ningún código Java expuesto que llame al servlet. Toda la configuración se realiza en web.xml

Como quiero

Espere la respuesta 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 un patrón de diseño para manejar la solicitud asíncrona y esperar la respuesta como se indicó anteriormente? De otra manera que el oyente. Por favor, no hay biblioteca o marco.

EDITA Gracias hasta ahora las respuestas. No te di la imagen completa, así que expuse la clase de Geolocalización y comencé la implementación. No sé cómo implementar el método. ¿Alguien puede mostrar "cómo"? Él (o ella) también debe implementar el oyente para recuperar los 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 ?
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta