Spiegazione del multithreading in Java [con esempi]
Pubblicato: 2021-06-15Sommario
Discussioni in Java
I thread in Java aiutano il funzionamento efficiente di un programma. Le due unità di base di esecuzione del proforma sono il processo e i thread. Un processo potrebbe essere un'applicazione, un Programma o un ambiente di esecuzione autonomo.
Mentre i thread condividono una risorsa con quella del processo ed esistono con essa. Almeno un thread è presente in ogni applicazione java chiamata thread principale. È possibile creare più thread dal thread principale. Ulteriori informazioni su come creare un thread in Java.
Vantaggi di Java Thread
- Sono necessari meno tempo e risorse per creare un thread rispetto ai processi. Pertanto i thread sono anche chiamati un processo leggero.
- I dati e il codice del processo padre sono condivisi dai thread.
- L'intercomunicazione tra thread è facile rispetto all'intercomunicazione in un processo.
- I thread in Java possono essere creati attraverso l'implementazione di java.lang. Interfaccia eseguibile.
Filo singolo
In un programma sono presenti più unità di elaborazione di cui la più piccola è denominata single thread. Attraverso l'uso della "classe thread" Java applica i thread. Esistono due tipi di thread; il thread del demone e il thread dell'utente.
Quando l'applicazione deve essere pulita, si verifica l'uso del thread daemon. Viene eseguito in background di un'applicazione. Mentre i thread utente vengono creati al primo avvio dell'applicazione.
Vantaggi del singolo thread:
- L'overhead dell'applicazione viene ridotto poiché l'esecuzione di un singolo thread avviene in un sistema.
- Il costo di manutenzione dell'applicazione viene ridotto con l'uso di thread singoli.
Multitasking in Java
Il multitasking si riferisce al processo di esecuzione di più attività da parte della CPU contemporaneamente. A volte la commutazione della CPU può essere eseguita dall'utente tra le attività per collaborare con ciascun programma insieme. Memoria e risorse separate vengono allocate ai processi in multitasking. In due modi, è possibile ottenere il multitasking.
1. Multielaborazione (multitasking basato sui processi)
- Per ogni processo viene allocata un'area di memoria separata. Quindi c'è un indirizzo per ogni processo in memoria.
- I processi sono pesanti.
- C'è un alto costo di comunicazione tra i processi.
- È necessario del tempo per passare da un processo all'altro. Ciò è necessario per aggiornare elenchi, mappe di memoria, ecc.
2. Multithreading (multitasking basato su thread)
- Lo stesso indirizzo è condiviso tra i thread.
- I fili sono leggeri.
- C'è un basso costo di comunicazione tra i thread.
Cos'è il multithreading?
Quando due o più thread vengono eseguiti contemporaneamente in un programma, il meccanismo viene definito multithreading. Un singolo processo crea molti thread aumentando la potenza di calcolo. Due o più parti di un programma vengono eseguite in un modo che porta al massimo utilizzo della CPU.
I thread sono indicati come le singole parti del programma. I processi in un'applicazione possono contenere più thread o singoli thread.
Più thread di un'applicazione sono consentiti dalla Java Virtual Machine. Ogni thread ha la sua priorità. Pertanto, la preferenza di esecuzione è data ai thread che hanno una priorità maggiore rispetto a quelli che hanno una priorità inferiore.
Per ottenere il multitasking, vengono utilizzati sia il processo di multithreading che il multiprocessing. Poiché un'area di memoria condivisa viene utilizzata nel multithreading, viene utilizzata principalmente durante il multiprocessing. La memoria viene salvata poiché non è richiesta un'allocazione aggiuntiva di memoria. Inoltre, il tempo impiegato è inferiore rispetto al multiprocessing poiché si verifica il cambio di contesto tra i thread.
Nell'animazione, nei giochi, viene utilizzato il multithreading Java . Fare clic se si desidera saperne di più sull'architettura e sui componenti Java.
Due meccanismi possono essere utilizzati per creare fili.
1. Estensione della classe di thread
2. Implementazione dell'interfaccia eseguibile
Classe thread vs interfaccia eseguibile
- L'estensione della "classe di thread" non può estendere altre classi poiché le ereditarietà multiple non sono supportate in Java. Ma con l'implementazione dell'interfaccia "Runnable", altre classi base possono essere estese dalla classe.
- La funzionalità di base di un thread può essere estesa estendendo la classe Thread poiché vengono forniti metodi integrati come interrupt(), yield(), ecc.
- Quando viene utilizzato runnable verrà fornito un oggetto che più thread possono condividere.
Classe Java Thread
La programmazione dei thread in Java si ottiene attraverso la classe thread. I costruttori sono forniti dalla classe thread e dai metodi per eseguire operazioni di thread. Una classe thread implementa un'interfaccia eseguibile ed estende la classe Object.
Alcuni metodi di thread comuni utilizzati sono:
- start(): l'esecuzione del thread viene avviata da questo metodo. Il metodo run() viene richiamato dalla JVM.
- sleep(int milliseconds): l'esecuzione del thread viene sospesa per millisecondi forniti poiché il processo di threading viene messo in pausa tramite questo metodo. Dopo la pausa, l'esecuzione del thread ricomincia. I thread possono essere sincronizzati tramite questo metodo.
- getName(): il nome del thread viene restituito tramite questo metodo.
- setPriority(int new priority): la priorità del thread viene modificata tramite questo metodo.
- yield(): il thread corrente viene interrotto con l'esecuzione degli altri thread con questo metodo.
- run(): il metodo serve per avviare un'azione nel thread.
- getPriority(): la priorità del thread viene restituita tramite l'uso di questo metodo.
- setName(): il nome del thread viene modificato tramite questo metodo.
- getId(): l'id del thread viene restituito tramite questo metodo.
- suspend(): il thread viene sospeso tramite questo metodo.
Ciclo di vita del filo
Il ciclo di vita del filo ha varie fasi, elencate di seguito:
- Novità: "Classe di thread" viene utilizzata per creare un thread in questa fase. Fino all'avvio del thread, il programma rimane in questa fase. Il metodo è anche chiamato filo nato.
- Eseguibile: il metodo start richiama l'istanza del thread in questa fase del ciclo di vita del thread. Allo scheduler viene affidato il controllo del thread per terminare l'esecuzione. Se il thread deve essere eseguito o meno dipende dallo scheduler.
- In esecuzione: una volta avviata l'esecuzione del thread, la fase viene spostata alla fase "in esecuzione". Un thread viene selezionato dallo scheduler dal pool di thread e avvia l'esecuzione dell'applicazione.
- In attesa : come suggerisce il nome, in questa fase del ciclo di vita il thread attende. La sincronizzazione dei thread è essenziale a causa dell'esecuzione di più thread in un'applicazione. Pertanto, è necessario che un thread attenda, finché l'esecuzione dell'altro thread non viene completata. Pertanto, la fase del ciclo di vita è anche nota come fase di attesa.
- Dead: La fase in cui si verifica la terminazione del thread è definita fase "morta". Una volta che il thread viene trasferito dall'esecuzione alla fine dell'elaborazione, viene terminato e quindi si trova nello "stato morto"
Sincronizzazione dei thread in Java
Il comportamento asincrono si verifica in un programma in caso di multithreading. Se presumibilmente i dati vengono scritti attraverso un thread e la lettura dei dati viene eseguita da un altro thread contemporaneamente, è possibile che nell'applicazione venga creata un'incoerenza.
Le risorse condivise tra i thread devono essere accessibili da altri thread. Pertanto, in tali casi, si avvicina l'approccio della sincronizzazione. I metodi sincronizzati sono disponibili in Java per ottenere il comportamento di sincronizzazione.
Quando un thread raggiunge il blocco sincronizzato, una volta raggiunto, il metodo non può essere chiamato da altri thread sullo stesso oggetto. Fino a quando il thread non termina l'esecuzione del blocco ed esce da esso, gli altri thread devono fermarsi e attendere.
Impara i corsi di software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.
Vantaggi del multithreading
- È possibile eseguire più operazioni contemporaneamente. Con i thread indipendenti in esecuzione, l'utente non viene bloccato.
- Il tempo viene risparmiato poiché più operazioni vengono eseguite insieme.
- Un thread non può essere influenzato da un altro thread poiché sono indipendenti. L'occorrenza di un'eccezione in un thread non influisce sull'esecuzione di altri thread.
Esempio di multithreading
Di seguito è mostrato un esempio di un programma multithreading in java:
Fonte
Figura 1: uno snippet dell'esempio di codice multithreading
La spiegazione del codice
Riga 3: La classe "GuruThread1" implementa runnable.
Riga 8: Visualizza il metodo principale della classe.
Riga 9: Viene creata un'istanza della classe thread, viene creata un'istanza "guruThread1″ e viene creato un thread.
Riga 10: Viene creata un'istanza della "classe Thread" e viene creata un'istanza "guruThread2" e un thread.
Riga 11: Viene avviato il thread denominato guruThread1.
Riga 12: Viene avviato il thread denominato guruThread2.
Riga 13: Viene emesso il testo "I nomi dei thread stanno seguendo:".
Riga 14: il metodo getName() viene utilizzato per ottenere il nome thread1.
Riga 15: Il metodo getName() viene utilizzato per ottenere il nome del thread2.
L'esecuzione del codice precedente genera il seguente output:
Fonte
Figura: uno screenshot dell'output generato dal programma multithreading in Java (tratto da
Conclusione
L'articolo ha discusso il concetto di multithreading in Java insieme a un esempio di programma multithreading in java. Il tuo apprendimento non si ferma qui e va d'accordo con tutti gli altri concetti di base di Java.
Se sei interessato a padroneggiare le tue capacità di programmazione a un prezzo conveniente e prepararti al settore, puoi controllare il corso offerto da upGrad "Master of Science in Computer Science". È rivolto a tutti i professionisti di livello medio nella fascia di età compresa tra i 21 ei 45 anni. Il corso è certificato dalla Liverpool John Moores University e progettato con oltre 500 ore di apprendimento, 309 progetti e compiti per tirare fuori il meglio di te. In caso di domande, inviaci un messaggio, il nostro team ti contatterà.