AntoninoRusso ha scritto:
Prima di tutto mi da l'errore java.lang.IllegalThreadStateException che non ho capito cosa riguardi
Innanzitutto un thread può essere avviato una volta sola, ovvero puoi fare prova.start(); soltanto una volta. Anche quando il thread termina (ovvero il suo run finisce), comunque
non si può riavviare quello stesso oggetto Thread. Bisognerebbe creare una nuova istanza di Thread (ovvero nel tuo caso di Worker).
Il for(;;) in ogni caso è dubbio e direi inutile. E pure il fatto di gestire il contatore a max 50 nel main è dubbio.
Quando avvii i due thread, essi vengono eseguiti con tempistiche "arbitrarie" e possono essere intervallati in qualunque modo.
L'output quindi potrebbe essere:
***#**#****#* .....
oppure
###**#***
oppure
#**###**##
ecc......
Insomma, qualunque combinazione. Quindi la domanda è: vuoi che ciascun thread faccia andare a capo ogni
suoi 50 simboli ..... o vuoi che si vada a capo comunque ogni 50
qualunque simboli?
Nel primo caso è facile/banale (perché è nel singolo thread). Nel secondo è più complicato, perché ci vuole una "coordinazione" tra i thread, che non puoi fare banalmente nel main come stavi pensando/cercando di fare.
AntoninoRusso ha scritto:
e in secondo non riesco a capire cosa si intenda per "sovrascrivere il metodo run()".
Significa fare il "override" di un metodo. Il tuo run() in Worker/Seconda fa il override (sovrascrive) il run() definito in java.lang.Thread.
P.S. Dovresti già avere i concetti di override/overload se arrivi ai thread ....