Ho risolto! Grazie per la risposta.

Per risolvere ho utilizzato un BoundedBuffer come middleware.

codice:
BoundedBuffer bbuffer = new BoundedBuffer(10);

// la gui inserisce i messaggi per connecter all'interno del boundedbuffer
ServerGui gui = new ServerGui(bbuffer);

// connecter può richiamare metodi di gui per aggiornare la gui
ConnecterServer connecter = new ConnecterServer(gui);

// carrier resta in ascolto sul bbuffer e avvisa connecter quando c'è qualcosa
Carrier carrier = new Carrier(bbuffer, connecter);
Richiamare metodi della gui per il suo aggiornamento è concettualmente corretto?
Es:
codice:
setLabel1(String t){
    label1.setText(t);
}