logo

Multithreading en Java

  1. Multithreading
  2. Multitasca
  3. Multitasca basada en processos
  4. Multitasca basada en fils
  5. Què és Thread

Multithreading en Java és un procés d'execució de diversos fils simultàniament.

Un fil és un subprocés lleuger, la unitat de processament més petita. Multiprocessament i multithreading, tots dos s'utilitzen per aconseguir la multitasca.

multiplicació matricial en c

Tanmateix, fem servir el multiprocés que el multiprocessament perquè els fils utilitzen una àrea de memòria compartida. No assignen una àrea de memòria separada, de manera que estalvien memòria i el canvi de context entre els fils triga menys temps que el procés.

Java Multithreading s'utilitza principalment en jocs, animació, etc.


Avantatges de Java Multithreading

1) Això no bloqueja l'usuari perquè els fils són independents i podeu realitzar diverses operacions alhora.

2) Tu pot realitzar moltes operacions juntes, de manera que estalvia temps .

3) Els fils són independent , de manera que no afecta altres fils si es produeix una excepció en un sol fil.


Multitasca

La multitasca és un procés d'execució de diverses tasques simultàniament. Utilitzem la multitasca per utilitzar la CPU. La multitasca es pot aconseguir de dues maneres:

  • Multitasca basada en processos (multiprocessament)
  • Multitasca basada en fils (multithreading)

1) Multitasca basada en processos (multiprocessament)

  • Cada procés té una adreça a la memòria. En altres paraules, cada procés assigna una àrea de memòria separada.
  • Un procés és pesat.
  • El cost de la comunicació entre el procés és alt.
  • El canvi d'un procés a un altre requereix un temps per desar i carregar registres , mapes de memòria, actualització de llistes, etc.

2) Multitasca basada en fils (multithreading)

  • Els fils comparteixen el mateix espai d'adreces.
  • Un fil és lleuger.
  • El cost de comunicació entre el fil és baix.

Nota: cal com a mínim un procés per a cada fil.

Què és Thread en java

Un fil és un subprocés lleuger, la unitat de processament més petita. És un camí d'execució independent.

Els fils són independents. Si hi ha una excepció en un fil, no afectarà altres fils. Utilitza una àrea de memòria compartida.

Multithreading de Java

Com es mostra a la figura anterior, s'executa un fil dins del procés. Hi ha un canvi de context entre els fils. Hi pot haver diversos processos dins del sistema operatiu i un procés pot tenir diversos fils.

Nota: Al mateix temps, només s'executa un fil.

Classe Java Thread

Java proporciona Classe de fil per aconseguir la programació de fils. La classe de fil proporciona constructors i mètodes per crear i realitzar operacions en un fil. La classe de fil s'estén Classe d'objectes i implementa la interfície Runnable.

Mètodes de fil de Java

S.N. Modificador i tipus Mètode Descripció
1) buit començar() S'utilitza per iniciar l'execució del fil.
2) buit correr() S'utilitza per fer una acció per a un fil.
3) buit estàtic dormir () Dormenta un fil durant la quantitat de temps especificada.
4) Fil estàtic currentThread() Retorna una referència a l'objecte de fil que s'està executant actualment.
5) buit uneix-te () Espera que mori un fil.
6) int getPriority() Torna la prioritat del fil.
7) buit setPriority() Canvia la prioritat del fil.
8) Corda getName() Retorna el nom del fil.
9) buit setName() Canvia el nom del fil.
10) llarg getId() Retorna l'identificador del fil.
11) booleà està viu() Comprova si el fil està viu.
12) buit estàtic rendiment () Fa que l'objecte de fil que s'està executant actualment s'atura i permet que altres fils s'executin temporalment.
13) buit suspendre () S'utilitza per suspendre el fil.
14) buit resum() S'utilitza per reprendre el fil suspès.
15) buit Atura() S'utilitza per aturar el fil.
16) buit destruir () S'utilitza per destruir el grup de fils i tots els seus subgrups.
17) booleà isDaemon() Comprova si el fil és un fil de dimoni.
18) buit setDaemon() Marca el fil com a dimoni o fil d'usuari.
19) buit interrompre () Interromp el fil.
20) booleà està interromput () Comprova si el fil s'ha interromput.
21) booleà estàtic interromput () Comprova si el fil actual s'ha interromput.
22) int estàtic activeCount() Retorna el nombre de fils actius al grup de fils actuals.
23) buit checkAccess() Determina si el fil que s'executa actualment té permís per modificar el fil.
24) booleà estàtic holdLock() Retorna true si i només si el fil actual manté el bloqueig del monitor a l'objecte especificat.
25) buit estàtic dumpStack() S'utilitza per imprimir un rastre de pila del fil actual al flux d'error estàndard.
26) StackTraceElement[] getStackTrace() Retorna una matriu d'elements de traça de pila que representen l'abocament de pila del fil.
27) int estàtic enumerar() S'utilitza per copiar el grup de fils de cada fil actiu i el seu subgrup a la matriu especificada.
28) Fil.Estat getState() S'utilitza per retornar l'estat del fil.
29) Grup de fils getThreadGroup() S'utilitza per retornar el grup de fils al qual pertany aquest fil
30) Corda toString() S'utilitza per retornar una representació de cadena d'aquest fil, inclòs el nom, la prioritat i el grup de fils.
31) buit notificar () S'utilitza per donar la notificació d'un sol fil que està esperant un objecte concret.
32) buit notifyAll() S'utilitza per donar la notificació a tots els fils d'espera d'un objecte concret.
33) buit setContextClassLoader() Estableix el context ClassLoader per al fil.
34) ClassLoader getContextClassLoader() Retorna el context ClassLoader per al fil.
35) Thread.UncaughtExceptionHandler estàtic getDefaultUncaughtExceptionHandler() Retorna el controlador predeterminat invocat quan un fil acaba bruscament a causa d'una excepció no detectada.
36) buit estàtic setDefaultUncaughtExceptionHandler() Estableix el controlador predeterminat que s'invoca quan un fil finalitza bruscament a causa d'una excepció no detectada.
Saps
  • Com realitzar dues tasques per dos fils?
  • Com realitzar multithreading per classe anònima?
  • Què és el programador de fils i quina diferència hi ha entre la programació preventiva i el tall de temps?
  • Què passa si iniciem un fil dues vegades?
  • Què passa si cridem al mètode run() en lloc del mètode start()?
  • Quin és l'objectiu del mètode d'unió?
  • Per què JVM finalitza el fil del dimoni si no queden fils d'usuari?
  • Què és el ganxo d'apagada?
  • Què és la recollida d'escombraries?
  • Quin és l'objectiu del mètode finalize()?
  • Què fa el mètode gc()?
  • Què és la sincronització i per què utilitzar la sincronització?
  • Quina diferència hi ha entre el mètode sincronitzat i el bloc sincronitzat?
  • Quines són les dues maneres de realitzar la sincronització estàtica?
  • Què és el bloqueig i quan es pot produir?
  • Què és la comunicació entre fils o la cooperació?
Què aprendrem a Multithreading
  • Multithreading
  • Cicle de vida d'un fil
  • Dues maneres de crear un fil
  • Com realitzar diverses tasques mitjançant diversos fils
  • Programador de fils
  • Dormir un fil
  • Podem iniciar un fil dues vegades?
  • Què passa si cridem al mètode run() en lloc del mètode start()?
  • Unir-se a un fil
  • Posar nom a un fil
  • Prioritat d'un fil
  • Fil del dimoni
  • ApagatHook
  • Recollida d'escombraries
  • Sincronització amb mètode sincronitzat
  • Bloc sincronitzat
  • Sincronització estàtica
  • Bloqueig
  • Comunicació entre fils