logo

Multithreading i Java

  1. Multithreading
  2. Göra flera saker samtidigt
  3. Processbaserad multitasking
  4. Trådbaserad multitasking
  5. 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.

Java Multithreading

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.
Vet du
  • 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?
Vad kommer vi att lära oss i Multithreading
  • 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