Questo di per sé può andare bene. Ma c'è un aspetto importante della variabile di istanza stopThread. Dato che non c'è alcuna sincronizzazione riguardo l'accesso a stopThread, questa variabile deve essere perlomeno marcata con la parola chiave volatile.
Se è volatile, è garantito che la modifica di stopThread da parte di un thread X sia assolutamente "visibile" dal thread che esegue il tuo run(). Altrimenti non ci sono garanzie.
Se fai:
codice:unThread.start(); System.out.println("test");
Lo start() di per sé non avvia ancora un bel niente. Fa solo passare il thread dallo stato "new" (oggetto Thread appena creato) allo stato "runnable" (cioè può essere eseguito). È poi lo scheduler dei thread che decide quando far partire effettivamente il run().
Quindi è perfettamente possibile che quella scritta "test" (e anche qualcos'altro dopo eventualmente) venga eseguita prima che il run() inizi la esecuzione!
Quando si ha a che fare con i thread bisogna tenere a mente che ci sono ben poche cose davvero "garantite" e prevedibili.![]()