- Multithreading
- Göra flera saker samtidigt
- Processbaserad multitasking
- Trådbaserad multitasking
- Vad är tråd
Multitråda in Java är en process för att köra flera trådar samtidigt.
En tråd är en lätt delprocess, den minsta bearbetningsenheten. Multiprocessing och multithreading, båda används för att uppnå multitasking.
konvertera ett java-objekt till json
Däremot använder vi multithreading än multiprocessing eftersom trådar använder ett delat minnesområde. De allokerar inte separat minnesområde så sparar minne och kontextväxling mellan trådarna tar mindre tid än processen.
Java Multithreading används mest i spel, animationer etc.
Fördelar med Java Multithreading
1) Det blockerar inte användaren eftersom trådar är oberoende och du kan utföra flera operationer samtidigt.
2) Du kan utföra många operationer tillsammans, så det sparar tid .
3) Trådar är oberoende , så det påverkar inte andra trådar om ett undantag inträffar i en enda tråd.
Göra flera saker samtidigt
Multitasking är en process för att utföra flera uppgifter samtidigt. Vi använder multitasking för att utnyttja processorn. Multitasking kan uppnås på två sätt:
- Processbaserad multitasking (multiprocessing)
- Trådbaserad multitasking (Multithreading)
1) Processbaserad multitasking (multiprocessing)
- Varje process har en adress i minnet. Med andra ord allokerar varje process ett separat minnesområde.
- En process är tung.
- Kostnaden för kommunikation mellan processen är hög.
- Att byta från en process till en annan kräver lite tid för att spara och ladda register , minneskartor, uppdatering av listor osv.
2) Trådbaserad multitasking (multithreading)
- Trådar delar samma adressutrymme.
- En tråd är lätt.
- Kostnaden för kommunikation mellan tråden är låg.
Obs: Minst en process krävs för varje tråd.
Vad är tråd i java
En tråd är en lätt delprocess, den minsta bearbetningsenheten. Det är en separat väg för avrättning.
Trådarna är oberoende. Om det förekommer undantag i en tråd påverkar det inte andra trådar. Den använder ett delat minnesområde.
Som visas i ovanstående figur exekveras en tråd inuti processen. Det är kontextväxling mellan trådarna. Det kan finnas flera processer i operativsystemet och en process kan ha flera trådar.
Obs: I taget körs bara en tråd.
Java tråd klass
Java ger Trådklass för att uppnå trådprogrammering. Trådklass ger konstruktörer och metoder för att skapa och utföra operationer på en tråd. Trådklassen förlängs Objektklass och implementerar körbart gränssnitt.
Java-trådsmetoder
S.N. | Modifierare och typ | Metod | Beskrivning |
---|---|---|---|
1) | tomhet | Start() | Den används för att starta exekveringen av tråden. |
2) | tomhet | springa() | Den används för att göra en åtgärd för en tråd. |
3) | statiskt tomrum | sova() | Den sover en tråd under den angivna tiden. |
4) | statisk tråd | aktuell tråd() | Den returnerar en referens till det trådobjekt som för närvarande körs. |
5) | tomhet | Ansluta sig() | Den väntar på att en tråd ska dö. |
6) | int | getPriority() | Det returnerar prioritet för tråden. |
7) | tomhet | prioritera() | Det ändrar trådens prioritet. |
8) | Sträng | hämta namn() | Det returnerar namnet på tråden. |
9) | tomhet | Ange namn() | Det ändrar namnet på tråden. |
10) | lång | getId() | Den returnerar trådens ID. |
elva) | booleskt | lever() | Den testar om tråden lever. |
12) | statiskt tomrum | avkastning() | Det gör att det körande trådobjektet pausar och tillåter att andra trådar körs tillfälligt. |
13) | tomhet | uppskjuta() | Den används för att suspendera tråden. |
14) | tomhet | återuppta() | Den används för att återuppta den upphängda tråden. |
femton) | tomhet | sluta() | Den används för att stoppa tråden. |
16) | tomhet | förstöra() | Den används för att förstöra trådgruppen och alla dess undergrupper. |
17) | booleskt | isDaemon() | Den testar om tråden är en demon-tråd. |
18) | tomhet | setDaemon() | Den markerar tråden som demon eller användartråd. |
19) | tomhet | avbryta() | Det avbryter tråden. |
tjugo) | booleskt | är avbruten() | Den testar om tråden har blivit avbruten. |
tjugoett) | statisk boolean | avbruten() | Den testar om den aktuella tråden har avbrutits. |
22) | statisk int | activeCount() | Det returnerar antalet aktiva trådar i den aktuella trådens trådgrupp. |
23) | tomhet | checkAccess() | Det avgör om den aktuella tråden har behörighet att ändra tråden. |
24) | statisk boolean | holdLock() | Den returnerar sant om och endast om den aktuella tråden håller monitorlåset på det angivna objektet. |
25) | statiskt tomrum | dumpStack() | Den används för att skriva ut en stackspårning av den aktuella tråden till standardfelströmmen. |
26) | StackTraceElement[] | getStackTrace() | Den returnerar en uppsättning stackspårelement som representerar stackdumpen av tråden. |
27) | statisk int | räkna upp() | Den används för att kopiera varje aktiv tråds trådgrupp och dess undergrupp till den angivna arrayen. |
28) | Tråd.Stat | getState() | Den används för att återställa trådens tillstånd. |
29) | Trådgrupp | getThreadGroup() | Den används för att returnera den trådgrupp som denna tråd tillhör |
30) | Sträng | att stränga() | Den används för att returnera en strängrepresentation av denna tråd, inklusive trådens namn, prioritet och trådgrupp. |
31) | tomhet | meddela() | Den används för att avisera endast en tråd som väntar på ett visst objekt. |
32) | tomhet | notifyAll() | Den används för att ge meddelandet till alla väntande trådar för ett visst objekt. |
33) | tomhet | setContextClassLoader() | Det ställer in sammanhanget ClassLoader för tråden. |
3. 4) | ClassLoader | getContextClassLoader() | Den returnerar kontexten ClassLoader för tråden. |
35) | statisk Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Den returnerar standardhanteraren som anropas när en tråd abrupt avslutas på grund av ett oupptäckt undantag. |
36) | statiskt tomrum | setDefaultUncaughtExceptionHandler() | Den ställer in standardhanteraren som anropas när en tråd abrupt avslutas på grund av ett oupptäckt undantag. |
- Hur utför man två uppgifter i två trådar?
- Hur utför man multithreading av anonym klass?
- Vad är trådschemaläggaren och vad är skillnaden mellan förebyggande schemaläggning och tidsdelning?
- Vad händer om vi startar en tråd två gånger?
- Vad händer om vi anropar metoden run() istället för metoden start()?
- Vad är syftet med join-metoden?
- Varför avslutar JVM demontråden om inga användartrådar finns kvar?
- Vad är avstängningskroken?
- Vad är sophämtning?
- Vad är syftet med finalize()-metoden?
- Vad innebär gc()-metoden?
- Vad är synkronisering och varför använda synkronisering?
- Vad är skillnaden mellan synkroniserad metod och synkroniserat block?
- Vilka är de två sätten att utföra statisk synkronisering?
- Vad är dödläge och när kan det uppstå?
- Vad är intertrådskommunikation eller samarbete?
- Multithreading
- En tråds livscykel
- Två sätt att skapa en tråd
- Hur man utför flera uppgifter i flera trådar
- Trådschemaläggare
- Sover en tråd
- Kan vi starta en tråd två gånger?
- Vad händer om vi anropar metoden run() istället för metoden start()?
- Gå med i en tråd
- Namnge en tråd
- En tråds prioritet
- Demonstråd
- ShutdownHook
- Skräp samling
- Synkronisering med synkroniserad metod
- Synkroniserat block
- Statisk synkronisering
- Dödläge
- Kommunikation mellan trådar