Se il thread fa solo computazioni (niente I/O), il concetto della interruzione tramite interrupt() non funziona. In questi casi si deve usare una variabile di "flag" (un boolean è ok) della interruzione che il thread di tanto in tanto dovrà testare. Visto che hai un ciclo .. potrebbe testarlo proprio ad ogni ciclo. O al limite ogni tot. cicli.
Il punto è che tale variabile deve essere una variabile di istanza e oltretutto l'accesso alla variabile deve essere "sincronizzato" tra thread, quindi o fatto con l'acquisizione di un lock intrinseco degli oggetti (synchronized) o come scenario semplice mettendo la variabile come volatile.
Quindi il thread B che esegue computazioni, ogni tanto testerà quella variabile. E il thread A che vuole interrompere B setterà quella variabile es. a true.


Rispondi quotando