In questo articolo, esploreremo in dettaglio come utilizzare i Thread in Java, una caratteristica fondamentale per gestire esecuzioni concorrenti. Vedremo due approcci principali per creare un thread e comprenderemo le situazioni in cui ognuno di questi metodi รจ vantaggioso.
Creazione di un Thread come sottoclasse della classe Thread
Per creare un thread come sottoclasse della classe Thread, dobbiamo estendere la classe Thread e implementare il metodo run, dove inseriremo il codice da eseguire nel thread stesso. La classe Thread giร fornisce un metodo run, ma รจ vuoto, quindi dovremo sovrascriverlo con il nostro comportamento. Ecco un esempio pratico:
public class EsempioThread extends Thread {
public void run() {
int n;
for(n = 0; n < 6; n++) {
System.out.println("L'indice n รจ uguale a: " + n);
}
}
}
In questo esempio, abbiamo esteso la classe Thread e implementato il nostro codice all’interno del metodo run(). Ora, vediamo come eseguire effettivamente questo thread:
public class ImplementazioneThread {
public static void main(String[] args) {
EsempioThread nuovoThread = new EsempioThread();
nuovoThread.start();
}
}
Come notiamo, abbiamo creato un’istanza di EsempioThread e la abbiamo avviata con il metodo start(). ร importante utilizzare start() per lanciare un thread, poichรฉ non possiamo chiamare direttamente run(). Il metodo start() gestisce tutto il processo di avvio del thread e chiama automaticamente il metodo run().
Creazione di un Thread utilizzando l’interfaccia Runnable
Un altro metodo per creare un thread รจ implementando l’interfaccia Runnable. Questo approccio รจ spesso preferito poichรฉ offre maggiore flessibilitร e consente di estendere altre classi. Per farlo, dobbiamo seguire questi passaggi:
public class EsempioThread implements Runnable {
public void run() {
int n;
for(n = 0; n < 6; n++) {
System.out.println("L'indice n รจ uguale a: " + n);
}
}
}
Successivamente, creiamo una classe per eseguire il nostro thread:
public class ImplementazioneThread {
public static void main(String[] args) {
EsempioThread r = new EsempioThread();
Thread nuovoThread = new Thread(r);
nuovoThread.start();
}
}
In questo esempio, abbiamo creato un’istanza della classe EsempioThread e l’abbiamo passata al costruttore di Thread. Anche in questo caso, il metodo start() avvia l’esecuzione. Considerando che entrambi i metodi producono lo stesso output, il secondo metodo รจ generalmente preferito per la sua maggiore flessibilitร .
Ora avete acquisito le basi necessarie per lavorare con i thread in Java. Nella prossima lezione, approfondiremo come gestire la concorrenza fra piรน thread in esecuzione contemporaneamente, un argomento essenziale per programmatori Java avanzati.