Per rispondere alla tua domanda, mi è stato imposto. Anche senza che durante il corso si sia accennato a cosa voglia dire thread-safe, e cosa sia una classe synchronized. Per fortuna non sono uno sprovveduto totale e anche se sicuramente non bene come te, ho capito cosa intendi grazie a conoscenze che vanno oltre l'Università. Tutto ciò verrà aggiunto alla superficialità con il quale il professore ha gestito il corso...

Ma per parlare di cose serie, il tuo post è manna dal cielo e ti ringrazio moltissimo! Avevo visto il tuo sito di esempi, sappi che ti stimo molto per l'aiuto che da (e speravo in una tua risposta...)i! Purtroppo, ho ancora dei dubbi. Devo dire la verità, credo che questi dubbi svaniranno quando capirò BENE cosa succede all'interno di JTable, che per me è ancora un po' una "scatola chiusa".

CREDO di aver capito che quando passo un TableModel a JTable lui utilizzi i metodi getValueAt, getRowCount, getColumnCount ecc. per creare e popolare la Tabella. E fin qui ci siamo.
A questo punto mettiamo che l'utente clicchi su una cella editabile e scriva qualcosa. JTable cosa fa? Richiama setValueAt()? E quindi poi giustamente tu dici che io devo crearmi un TableModelEvent e notificarlo a tutti i listener, sarà questo a dire in qualche modo a JTable di ricaricarsi e rileggere la struttura perché è cambiata (anche del tutto, non solo la cella editabile)?

Scusa per le tante domande, ma la differenza tra argomenti del corso e argomenti del progetto è tanta che ci sentiamo pesci in una vasca di squali.