Como recuperar um valor que deve ser calculado em outro thread

Há muitos casos em que o segmento A requer um valor que deve ser calculado no segmento B. (Geralmente, B == EDT.) Considere este exemplo:

String host;
SwingUtilities.invokeAndWait(new Runnable() {
    public void run() {
        host = JOptionPane.showInputDialog("Enter host name: ");
    }
});
openConnection(host);

Obviamente, isso não é compilado, porque a classe interna anônima não tem permissão para gravar emhost. Qual é a maneira mais simples e limpa de fazer isso funcionar? Incluí as maneiras que conheço abaixo.

questionAnswers(7)

yourAnswerToTheQuestion