- Multithreading
- Multitasking
- Multitasking basato sui processi
- Multitasking basato su thread
- 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.
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. |
- 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?
- 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