Multithreading in Java – Impara con gli esempi

Pubblicato: 2022-06-23

Java è un linguaggio di programmazione che supporta programmi multithread. I programmi multithread ospitano due o più parti (thread) che vengono eseguite contemporaneamente, gestendo attività diverse, consentendo un utilizzo ottimale della CPU. Il multithreading è un'estensione del multitasking. Il multitasking può essere definito come una funzionalità in cui più processi condividono una risorsa di elaborazione comune come un'unità di elaborazione centrale.

Il multithreading estende il concetto di multi-tasking a varie applicazioni in cui le operazioni definite possono essere suddivise in thread singoli più piccoli.

Ciascuno di questi thread viene eseguito simultaneamente e indipendentemente con percorsi di esecuzione diversi, in modo che un'eccezione in un thread non influisca sulle prestazioni degli altri.

Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Sommario

Che cos'è il multithreading in Java?

Il multithreading in Java è il punto in cui più thread vengono eseguiti contemporaneamente per massimizzare il tempo della CPU.

Ciclo di vita di un filo

I thread hanno diverse fasi del loro ciclo di vita. Sono i seguenti:

  • Nuovo: il thread inizia il suo ciclo di vita come un nuovo thread. Rimane in questa fase neonatale fino a quando un programma non esegue il thread.
  • Eseguibile: un thread nato entra nella fase eseguibile quando un programma lo avvia. Il thread inizia a eseguire il suo compito in questa fase.
  • In attesa: questa è una fase di transizione in cui un thread attende che un altro thread completi la sua attività. Un thread nella fase di attesa passa a una fase eseguibile dopo aver ricevuto un segnale da altri thread.
  • Attesa a tempo: questa è una fase in cui un thread eseguibile può entrare per un intervallo di tempo specifico. I thread in questa fase tornano alla fase eseguibile alla fine dell'intervallo di tempo specifico.
  • Dead: questa è la fase finale del ciclo di vita di un thread. Un thread entra in questa fase dopo aver completato la sua attività.

Vantaggi del multithreading in Java

  • Poiché i thread in Java sono indipendenti, il multithreading Java non blocca gli utenti e possono eseguire molte operazioni contemporaneamente.
  • Poiché il multithreading in Java consente operazioni multiple, consente di risparmiare tempo ed è efficiente.
  • Il programma può essere eseguito in modo continuo anche se una parte di esso viene intercettata.
  • Migliora le prestazioni rispetto ai programmi paralleli convenzionali che utilizzano più processi.
  • Creazione di programmi efficienti che sfruttano al massimo il tempo della CPU.
  • Migliora notevolmente il tempo di risposta di applicazioni complesse.
  • Richiede meno risorse rispetto ai tradizionali programmi paralleli.

Ordine di priorità del thread

Il sistema operativo determina la pianificazione di esecuzione del thread in base alla priorità del thread. La priorità di un thread è determinata in base al valore della sua costante.

  • La costante 1 ottiene la priorità minima ( MIN_PRIORITY)
  • La costante 5 ottiene la priorità normale ( NORM_PRIORITY)
  • La costante 10 ottiene la priorità massima (MAX_PRIORITY)

Corsi e articoli popolari sull'ingegneria del software

Programmi popolari
Programma Executive PG in Software Development - IIIT B Programma di certificazione Blockchain - PURDUE Programma di certificazione di sicurezza informatica - PURDUE MSC in Informatica - IIIT B
Altri articoli popolari
Stipendio per ingegnere cloud negli Stati Uniti 2021-22 Stipendio di AWS Solution Architect negli Stati Uniti Stipendio per sviluppatori back-end negli Stati Uniti Stipendio per sviluppatori front-end negli Stati Uniti
Stipendio sviluppatore Web negli Stati Uniti Domande per il colloquio con lo Scrum Master nel 2022 Come iniziare una carriera nella sicurezza informatica nel 2022? Opzioni di carriera negli Stati Uniti per gli studenti di ingegneria

Come creare un thread in Java?

I thread possono essere creati in Java in due modi:

  1. Estensione della classe di thread
  2. Implementazione di un'interfaccia eseguibile

Creazione di un thread estendendo la classe Thread

Di seguito sono riportati alcuni metodi della classe thread e le loro funzioni.

  • getName() : Per ottenere il nome del thread
  • getPriority(): per ottenere la priorità del thread
  • is Alive(): per trovare se un thread è in esecuzione
  • join(): aspetta la chiusura di un thread
  • run() : punto di ingresso del thread
  • sleep(): per sospendere un thread per un intervallo di tempo specifico.
  • start() : per attivare un thread tramite il suo metodo run().

Passaggio 1 : sovrascrivere il metodo run() fornito nella classe thread. Questo funge da punto di ingresso per il thread e l'intera logica del programma dovrebbe essere racchiusa in 4this.

La sintassi del metodo run() è la seguente:

corsa vuota pubblica ( )

Passaggio 2: avviare l'oggetto thread tramite il metodo start() la cui sintassi è un void start() .

Ecco alcuni esempi di un programma multithreading in Java:

Esempio 1:

class MultithreadingDemo estende Thread{

esecuzione vuota pubblica(){

System.out.println("Il mio thread è in esecuzione.");

}

public static void main(String args[]){

MultithreadingDemo obj=new MultithreadingDemo();

obj.start();

}

}

L'output del programma di cui sopra sarà:

Il mio thread è in esecuzione.

Esempio 2:

class Count estende Thread

{

Contare()

{

super("il mio filo si sta estendendo");

System.out.println("il mio thread è stato creato" + questo);

inizio();

}

corsa vuota pubblica()

{

Tentativo

{

for (int i=0 ;i<10;i++)

{

System.out.println(“Stampa conteggio ” + i);

Thread.sleep(1000);

}

}

catch(InterruptedException e)

{

System.out.println("il mio thread è stato interrotto");

}

System.out.println("Il mio thread è finito");

}

}

classe ExtendingExample

{

public static void main(String args[])

{

Conteggio cnt = nuovo Conteggio();

Tentativo

{

mentre(cnt.isAlive())

{

System.out.println("Il thread principale sarà vivo finché il thread figlio non sarà attivo");

Thread.sleep(1500);

}

}

catch(InterruptedException e)

{

System.out.println("Il thread principale è stato interrotto");

}

System.out.println("L'esecuzione del thread principale è terminata");

}

}

L'output del programma di cui sopra sarà

il mio thread è stato creatoThread[il mio thread eseguibile,5,main]

Il thread principale sarà attivo fino a quando il thread figlio non sarà attivo

Stampa del conteggio 0

Stampa del conteggio 1

Il thread principale sarà attivo fino a quando il thread figlio non sarà attivo

Stampa del conteggio 2

Il thread principale sarà attivo fino a quando il thread figlio non sarà attivo

Stampa del conteggio 3

Stampa del conteggio 4

Il thread principale sarà attivo fino a quando il thread figlio non sarà attivo

Stampa del conteggio 5

Il thread principale sarà attivo fino a quando il thread figlio non sarà attivo

Stampa del conteggio 6

Stampa del conteggio 7

Il thread principale sarà attivo fino a quando il thread figlio non sarà attivo

Stampa del conteggio 8

Il thread principale sarà attivo fino a quando il thread figlio non sarà attivo

Stampa del conteggio 9

la mia esecuzione del thread è terminata

L'esecuzione del thread principale è terminata

Creazione di un thread implementando un'interfaccia eseguibile

Ci sono tre passaggi importanti da seguire durante l'utilizzo di questo metodo.

Passaggio 1 : un metodo run() dovrebbe essere implementato da un'interfaccia eseguibile. Questo metodo run() funge da punto di ingresso per il thread e dovrebbe contenere l'intera logica del programma.

La sintassi per il metodo run() è

corsa vuota pubblica( )

Passaggio 2: un oggetto thread deve essere attivato utilizzando il costruttore indicato di seguito.

Thread(threadObj eseguibile, String threadName);

Qui threadObj agisce come la classe che implementa l'interfaccia eseguibile e il nome del thread è il nome assegnato al nuovo thread.

Passaggio 3: dopo aver creato l'oggetto thread, può essere avviato dal metodo start() che esegue il metodo run().

La sintassi del metodo start() è la seguente.

inizio vuoto();

Un esempio di creazione di un thread implementando un'interfaccia eseguibile può essere trovato qui .

Per saperne di più sul multithreading Java e sullo sviluppo software, ti consigliamo di iscriverti all'Executive Post Graduate Program in Software Development offerto da IIIT Bangalore in associazione con upGrad.

Il programma Executive PG in Software Development è un programma online di 13 mesi progettato per aiutare i professionisti che lavorano a fare un salto da gigante nelle loro carriere attraverso case study e progetti rilevanti per il settore. Il programma include anche oltre dieci sessioni dal vivo degli esperti del settore per aiutare i candidati a imparare meglio.

Il programma include progetti di settore per aiutare i candidati ad avere esperienza pratica e un'adeguata esposizione al settore per rendere il loro apprendimento pertinente e pratico. Il completamento del programma ricompenserà i candidati con l'ambita certificazione IIIT B e lo status di alumni.

Il programma viene fornito con il supporto per il posizionamento a 360 gradi di upGrad che ha avuto un impatto su oltre 40.000 studenti pagati da tutti gli angoli del mondo per migliorare ulteriormente le cose. upGrad ha una base di studenti provenienti da oltre 85 paesi che offrono un'opportunità inestimabile di avere una rete globale di pari per i candidati.

Qual è la differenza tra multitasking e multithreading in Java?

Il multitasking è il processo mediante il quale è possibile eseguire più attività contemporaneamente e il multithreading è il processo di esecuzione di più thread contemporaneamente, con ogni thread che esegue un'attività diversa.

L'ereditarietà multipla è supportata da Java?

Il linguaggio di programmazione Java supporta l'ereditarietà multipla, un processo in cui una classe implementa più di un'interfaccia. Una classe può avere diverse implementazioni di un metodo (predefinito o statico) nelle interfacce. L'ereditarietà multipla in Java può essere implementata solo con interfacce e non classi, a differenza del linguaggio C++.

Il multithreading può migliorare le prestazioni di Java?

Il multithreading migliora le prestazioni di Java consentendo a più CPU di occuparsi dello stesso problema. Questo non solo accelera il processo, ma aiuta anche a risolvere i problemi in modo efficiente.