logo

Multithread in Java

  1. Multithreading
  2. Multitasking
  3. Multitasking basato sui processi
  4. Multitasking basato su thread
  5. Cos'è Thread

Ingresso multithread Giava è un processo di esecuzione di più thread contemporaneamente.

Un thread è un sottoprocesso leggero, la più piccola unità di elaborazione. Multiprocessing e multithreading, entrambi vengono utilizzati per ottenere il multitasking.

inversione delle corde in c

Tuttavia, utilizziamo il multithreading piuttosto che il multiprocessing perché i thread utilizzano un'area di memoria condivisa. Non allocano un'area di memoria separata, quindi risparmiano memoria e il cambio di contesto tra i thread richiede meno tempo del processo.

Il multithreading Java è utilizzato principalmente nei giochi, nelle animazioni, ecc.


Vantaggi del multithreading Java

1) Esso non blocca l'utente perché i thread sono indipendenti e puoi eseguire più operazioni contemporaneamente.

2) Tu può eseguire molte operazioni insieme, quindi fa risparmiare tempo .

3) I thread sono indipendente , quindi non influisce sugli altri thread se si verifica un'eccezione in un singolo thread.


Multitasking

Il multitasking è un processo di esecuzione di più attività contemporaneamente. Usiamo il multitasking per utilizzare la CPU. Il multitasking può essere raggiunto in due modi:

  • Multitasking basato sui processi (Multiprocessing)
  • Multitasking basato su thread (Multithreading)

1) Multitasking basato sui processi (Multiprocessing)

  • Ogni processo ha un indirizzo in memoria. In altre parole, ogni processo alloca un'area di memoria separata.
  • Un processo è pesante.
  • Il costo della comunicazione tra i processi è elevato.
  • Passare da un processo all'altro richiede del tempo per il salvataggio e il caricamento registri , mappe di memoria, elenchi di aggiornamento, ecc.

2) Multitasking basato su thread (Multithreading)

  • I thread condividono lo stesso spazio di indirizzi.
  • Al filo è leggero.
  • Il costo della comunicazione tra i thread è basso.

Nota: è richiesto almeno un processo per ciascun thread.

Cos'è Thread in Java

Un thread è un sottoprocesso leggero, la più piccola unità di elaborazione. È un percorso di esecuzione separato.

I thread sono indipendenti. Se si verifica un'eccezione in un thread, non influisce sugli altri thread. Utilizza un'area di memoria condivisa.

Multithreading Java

Come mostrato nella figura sopra, un thread viene eseguito all'interno del processo. C'è un cambio di contesto tra i thread. Possono esserci più processi all'interno del sistema operativo e un processo può avere più thread.

Nota: viene eseguito solo un thread alla volta.

Classe thread Java

Java fornisce Classe del thread per ottenere la programmazione del thread. La classe thread fornisce costruttori e metodi per creare ed eseguire operazioni su un thread. La classe thread si estende Classe dell'oggetto e implementa l'interfaccia Runnable.

Metodi di thread Java

S.N. Modificatore e tipo Metodo Descrizione
1) vuoto inizio() Viene utilizzato per avviare l'esecuzione del thread.
2) vuoto correre() Viene utilizzato per eseguire un'azione per un thread.
3) vuoto statico sonno() Dorme un thread per il periodo di tempo specificato.
4) filo statico discussione corrente() Restituisce un riferimento all'oggetto thread attualmente in esecuzione.
5) vuoto giuntura() Aspetta che un thread muoia.
6) int getPriorità() Restituisce la priorità del thread.
7) vuoto setPriority() Cambia la priorità del thread.
8) Corda getNome() Restituisce il nome del thread.
9) vuoto imposta nome() Cambia il nome del thread.
10) lungo getId() Restituisce l'id del thread.
undici) booleano è vivo() Verifica se il thread è vivo.
12) vuoto statico prodotto() Fa sì che l'oggetto thread attualmente in esecuzione venga messo in pausa e consenta l'esecuzione temporanea di altri thread.
13) vuoto sospendere() Viene utilizzato per sospendere il thread.
14) vuoto riprendere() Serve per riprendere il thread sospeso.
quindici) vuoto fermare() Serve per fermare il filo.
16) vuoto distruggere() Viene utilizzato per distruggere il gruppo di thread e tutti i suoi sottogruppi.
17) booleano èDaemon() Verifica se il thread è un thread daemon.
18) vuoto setDaemon() Contrassegna il thread come demone o thread utente.
19) vuoto interrompere() Interrompe il filo.
venti) booleano è interrotto() Verifica se il thread è stato interrotto.
ventuno) booleano statico interrotto() Verifica se il thread corrente è stato interrotto.
22) interno statico conteggioattivo() Restituisce il numero di thread attivi nel gruppo di thread del thread corrente.
23) vuoto controllaAccesso() Determina se il thread attualmente in esecuzione dispone dell'autorizzazione per modificare il thread.
24) booleano statico tieniLock() Restituisce true se e solo se il thread corrente mantiene il blocco del monitor sull'oggetto specificato.
25) vuoto statico dumpStack() Viene utilizzato per stampare una traccia dello stack del thread corrente nel flusso di errori standard.
26) StackTraceElement[] getStackTrace() Restituisce una matrice di elementi di traccia dello stack che rappresentano lo stack dump del thread.
27) interno statico enumerare() Viene utilizzato per copiare il gruppo di thread di ogni thread attivo e il relativo sottogruppo nell'array specificato.
28) Thread.State getState() Viene utilizzato per restituire lo stato del thread.
29) ThreadGroup getThreadGroup() Viene utilizzato per restituire il gruppo di thread a cui appartiene questo thread
30) Corda accordare() Viene utilizzato per restituire una rappresentazione di stringa di questo thread, incluso il nome, la priorità e il gruppo di thread del thread.
31) vuoto notificare() Viene utilizzato per inviare la notifica per un solo thread che è in attesa di un particolare oggetto.
32) vuoto notificaTutti() Viene utilizzato per dare la notifica a tutti i thread in attesa di un particolare oggetto.
33) vuoto setContextClassLoader() Imposta il contesto ClassLoader per il thread.
3.4) ClassLoader getContextClassLoader() Restituisce il contesto ClassLoader per il thread.
35) Thread.UncaughtExceptionHandler statico getDefaultUncaughtExceptionHandler() Restituisce il gestore predefinito richiamato quando un thread termina improvvisamente a causa di un'eccezione non rilevata.
36) vuoto statico setDefaultUncaughtExceptionHandler() Imposta il gestore predefinito richiamato quando un thread termina improvvisamente a causa di un'eccezione non rilevata.
Sai
  • Come eseguire due attività da due thread?
  • Come eseguire il multithreading tramite classe anonima?
  • Cos'è il Thread Scheduler e qual è la differenza tra la pianificazione preventiva e il time slicing?
  • Cosa succede se iniziamo un thread due volte?
  • Cosa succede se chiamiamo il metodo run() invece del metodo start()?
  • Qual è lo scopo del metodo join?
  • Perché JVM termina il thread del demone se non rimangono thread utente?
  • Cos'è il gancio di spegnimento?
  • Cos'è la raccolta dei rifiuti?
  • Qual è lo scopo del metodo finalize()?
  • Cosa significa il metodo gc()?
  • Cos'è la sincronizzazione e perché utilizzarla?
  • Qual è la differenza tra metodo sincronizzato e blocco sincronizzato?
  • Quali sono i due modi per eseguire la sincronizzazione statica?
  • Cos’è lo stallo e quando può verificarsi?
  • Che cos'è la comunicazione o cooperazione interthread?
Cosa impareremo nel Multithreading
  • Multithreading
  • Ciclo di vita di un thread
  • Due modi per creare un thread
  • Come eseguire più attività da più thread
  • Pianificatore di thread
  • Dormire un filo
  • Possiamo iniziare una discussione due volte?
  • Cosa succede se chiamiamo il metodo run() invece del metodo start()?
  • Partecipazione a un thread
  • Dare un nome a un thread
  • Priorità di un thread
  • Filo del demone
  • ShutdownHook
  • Raccolta dei rifiuti
  • Sincronizzazione con metodo sincronizzato
  • Blocco sincronizzato
  • Sincronizzazione statica
  • Una situazione di stallo
  • Comunicazione tra thread