Guarda, non ho letto tutto il codice perchè è un po' lungo e non ho molto tempo. Posso però suggerirti di incapsulare tutta la logica di gestione della domanda/risposta in una apposita classe (es. con molta fantasia ... DomandaRisposta ) invece di sparpagliare la logica tra le due classi per comandante e soldatino (che non è il massimo).

In pratica ti sto suggerendo di avere un oggetto DomandaRisposta che sarà "condiviso" dalle due entità e che potrebbe avere 3 metodi:

String poniDomanda(String domanda).
Che pone la domanda, sta in wait finché non arriva una risposta e quindi ritorna con la risposta.

String leggiDomanda()
Che sta in wait fino all'arrivo di una domanda quindi la restituisce.

void rispondi(String risposta)
Che risponde alla domanda facendo "risvegliare" il thread che ha invocato poniDomanda.