Come creare un thread in Java? | Multithreading in Java

Pubblicato: 2020-12-29

In questo articolo, daremo un'occhiata al threading in Java ed esploreremo i meccanismi che rendono possibile il threading.

Sommario

Threading in Java

La funzione di threading in Java è un processo secondario leggero. È considerata la più piccola unità di elaborazione. È un mezzo per ottenere il multitasking in un programma. È una funzione utile quando si tratta di giochi, animazioni, ecc.

Java ha un supporto integrato per la creazione di thread e multi-thread. Questo è un approccio intelligente per ridurre al minimo le inefficienze e il trascinamento mediante un utilizzo ottimale dello spazio della CPU. In Java, questo può essere fatto in due modi:

  1. Estendi classe thread, o
  2. Implementare l'interfaccia eseguibile

Quando più di un thread vengono eseguiti contemporaneamente, si parla di multithreading. Ciò consente essenzialmente l'esecuzione simultanea di più parti di un programma, ciascuna parte di un thread e ogni thread segue un percorso distinto per l'esecuzione.

I thread utilizzano lo spazio di memoria condiviso; la memoria non è allocata a ciascuna parte, con conseguente utilizzo massimo della CPU. Inoltre, cambiare i contesti non richiede molto tempo. Tuttavia, troppi thread potrebbero coinvolgere la tua CPU nel cambio di contesto e la tua esecuzione potrebbe subire dei ritardi.

Un thread può esistere in uno dei seguenti sei stati

  1. NUOVO – non appena un thread viene creato, esiste nel nuovo stato. In sostanza significa che il thread deve ancora iniziare l'esecuzione.
  2. RUNNING – quando un thread è in esecuzione o è in linea per essere eseguito, è in stato di esecuzione.
  3. ATTESA – un thread in esecuzione a volte viene interrotto o sospeso per consentire il verificarsi di un'altra attività. Una versione senza timeout di wait() o join() può sospendere l'esecuzione di un thread. Una volta che l'azione si è verificata, viene ripreso un thread sospeso.
  4. TEMPO DI ATTESA – un thread in esecuzione a volte viene temporaneamente interrotto o sospeso per una durata specifica. Ad esempio, quando viene chiamata la funzione sleep().
  5. BLOCCATO – quando un thread Java sospeso non può acquisire una particolare risorsa, viene bloccato ed esiste nello stato bloccato.
  6. TERMINATO – quando un thread ha completato la sua esecuzione, esiste nello stato terminato. Tuttavia, puoi terminare un thread in qualsiasi momento.

Ulteriori informazioni sull'architettura e sui componenti Java.

Vantaggi della creazione di un thread in Java

Ci sono diversi vantaggi nella creazione di thread. Alcuni di questi lo sono

  1. Poiché i thread sono indipendenti, un'esecuzione non influisce su un'altra anche quando operano su spazio di memoria condiviso. Ciò significa anche che puoi eseguire più di un'operazione contemporaneamente.
  2. Il threading è una forma di multitasking e consente di risparmiare tempo.
  3. Un errore in un thread non influisce su un altro.

Come creare un thread in Java?

Come discusso in precedenza, ci sono due modi per farlo: Estendi la classe del thread o implementa l'interfaccia eseguibile

Classe di thread

Esistono costruttori e metodi nella classe Thread che consentono di eseguire operazioni, gestire e tenere traccia dei thread. Estende la classe Object che quindi implementa l'interfaccia Runnable complementare. I costruttori presenti nella classe thread sono :Thread(), Thread(String name), Thread(Runnable r) e Thread(Runnable r, String name).

Di seguito sono riportati i metodi e le loro descrizioni

Metodo A cosa serve?
cominciare() Avvia l'esecuzione
correre() Per eseguire un'azione per un thread
dormire() Sospende un thread per una determinata durata
giuntura() Attendi fino alla chiusura di un altro thread
getPriority() Per denotare la priorità di un determinato thread
impostarePriorità() Per modificare la priorità di un determinato thread
getName() Per restituire il nome di un thread specifico
imposta nome() Per cambiare il nome del thread specificato
getId() Per restituire l'ID di un determinato thread
è vivo() Per verificare se un thread è ancora esistente in qualcuno degli stati
prodotto() Sospende l'esecuzione di un oggetto thread per consentire l'esecuzione di altri thread
sospendere() Per sospendere un determinato thread
riprendere() Per riprendere un thread dallo stato sospeso
fermare() Per interrompere un determinato thread
distruggere() Per distruggere il gruppo di thread e i sottogruppi
interrompere() Per causare un'interruzione nell'esecuzione del thread
è interrotto() Per verificare se l'esecuzione di un determinato thread viene interrotta
interrotto() Per verificare se l'esecuzione del thread corrente viene interrotta
conteggio attivo() Per restituire il conteggio dei thread attivi in ​​un gruppo di thread
holdLock() Restituisce true se e solo se il thread corrente mantiene il blocco del monitor sull'oggetto specificato.
getState() Per determinare lo stato di un determinato thread
setContextClassLoader() Per impostare il contesto ClassLoader
getContextClassLoader() Per restituire il contesto ClassLoader

Per creare un thread estendendo la classe Thread, è necessario prima creare una classe che estenda la classe java.lang.Thread. Questa classe è definita per sovrascrivere il metodo run(). Successivamente, viene creato un oggetto nella nuova classe che segue chiamando il metodo start() per iniziare l'esecuzione del thread.

Deve leggere: Programmi Pattern in Java da verificare

Interfaccia eseguibile

Questo è il modo più semplice per creare un thread. È richiesto un solo metodo per implementare l'interfaccia eseguibile: run()

Per dichiararlo, scriviamo

corsa vuota pubblica()

All'interno di run(), procediamo alla scrittura del codice per creare un nuovo thread.

Iscriviti ai corsi di ingegneria del software dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Classe thread vs interfaccia eseguibile

La classe Thread ti impedisce di estendere qualsiasi altra classe. Questo perché l'ereditarietà multipla non è possibile in Java. Tuttavia, questo non è il caso quando implementiamo l'interfaccia Runnable in cui continui ad estendere altre classi.

L'estensione della classe Thread rende accessibili diversi metodi importanti che migliorano la funzionalità di un thread. Ad esempio, yield(), stop(), isalive(), interrupt(). L'interfaccia Runnable ha solo un metodo piuttosto limitante.

Avvolgendo

Se sei interessato a saperne di più su Java, lo sviluppo di software full-stack, dai un'occhiata al programma Executive PG di upGrad & IIIT-B in Full-stack Software Development, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, 9+ progetti e incarichi, stato di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Atterra sul lavoro dei tuoi sogni

Candidati ora per un Master in Ingegneria del Software