logo

Multithreading op Java

  1. Multithreading
  2. Multitasking
  3. Procesgebaseerde multitasking
  4. Thread-gebaseerde multitasking
  5. Wat is draad

Multithreading-in Java is een proces waarbij meerdere threads tegelijkertijd worden uitgevoerd.

Een thread is een lichtgewicht subproces, de kleinste verwerkingseenheid. Multiprocessing en multithreading, beide worden gebruikt om multitasking te bereiken.

roep de javascript-functie aan vanuit html

We gebruiken echter multithreading in plaats van multiprocessing, omdat threads een gedeeld geheugengebied gebruiken. Ze wijzen geen afzonderlijk geheugengebied toe, waardoor geheugen wordt bespaard, en het wisselen van context tussen de threads kost minder tijd dan het proces.

Java Multithreading wordt meestal gebruikt in games, animaties, enz.


Voordelen van Java-multithreading

1) Het blokkeert de gebruiker niet omdat threads onafhankelijk zijn en u meerdere bewerkingen tegelijkertijd kunt uitvoeren.

2) Jij kan veel bewerkingen tegelijk uitvoeren, dus het bespaart tijd .

3) Draden zijn onafhankelijk , zodat het geen invloed heeft op andere threads als er een uitzondering optreedt in een enkele thread.


Multitasking

Multitasking is een proces waarbij meerdere taken tegelijkertijd worden uitgevoerd. We gebruiken multitasking om de CPU te gebruiken. Multitasken kan op twee manieren:

  • Procesgebaseerde multitasking (Multiprocessing)
  • Thread-gebaseerde multitasking (Multithreading)

1) Procesgebaseerde multitasking (Multiprocessing)

  • Elk proces heeft een adres in het geheugen. Met andere woorden, elk proces wijst een afzonderlijk geheugengebied toe.
  • Een proces is zwaar.
  • De kosten van communicatie tussen de processen zijn hoog.
  • Het overschakelen van het ene proces naar het andere vergt enige tijd voor het opslaan en laden registreert , geheugenkaarten, bijwerken van lijsten, enz.

2) Thread-gebaseerde multitasking (Multithreading)

  • Threads delen dezelfde adresruimte.
  • Een draad is lichtgewicht.
  • De kosten van communicatie tussen de thread zijn laag.

Opmerking: voor elke thread is ten minste één proces vereist.

Wat is Thread in Java

Een thread is een lichtgewicht subproces, de kleinste verwerkingseenheid. Het is een apart uitvoeringstraject.

Draden zijn onafhankelijk. Als er een uitzondering optreedt in één thread, heeft dit geen invloed op andere threads. Het maakt gebruik van een gedeeld geheugengebied.

Java-multithreading

Zoals weergegeven in de bovenstaande afbeelding, wordt er binnen het proces een thread uitgevoerd. Er vindt contextwisseling plaats tussen de threads. Er kunnen meerdere processen binnen het besturingssysteem zijn, en één proces kan meerdere threads hebben.

Opmerking: Er wordt slechts één thread tegelijk uitgevoerd.

Java Thread-klasse

Java biedt Draadklasse om draadprogrammering te bereiken. Draadklasse biedt constructeurs en methoden om bewerkingen op een thread te maken en uit te voeren. Draadklasse wordt uitgebreid Objectklasse en implementeert Runnable-interface.

Java Thread-methoden

S.N. Modificator en type Methode Beschrijving
1) leegte begin() Het wordt gebruikt om de uitvoering van de thread te starten.
2) leegte loop() Het wordt gebruikt om een ​​actie voor een thread uit te voeren.
3) statische leegte slaap() Het slaapt een draad gedurende de opgegeven tijd.
4) statische draad huidigeThread() Het retourneert een verwijzing naar het momenteel uitgevoerde threadobject.
5) leegte meedoen() Het wacht tot een draad sterft.
6) int krijgPrioriteit() Het retourneert de prioriteit van de thread.
7) leegte setPrioriteit() Het verandert de prioriteit van de thread.
8) Snaar getName() Het retourneert de naam van de thread.
9) leegte setNaam() Het verandert de naam van de thread.
10) lang getId() Het retourneert de ID van de thread.
elf) Booleaans is levend() Er wordt getest of de draad leeft.
12) statische leegte opbrengst() Het zorgt ervoor dat het momenteel uitgevoerde threadobject pauzeert en andere threads tijdelijk laat uitvoeren.
13) leegte opschorten() Het wordt gebruikt om de draad op te hangen.
14) leegte cv() Het wordt gebruikt om de hangende draad te hervatten.
vijftien) leegte stop() Het wordt gebruikt om de draad te stoppen.
16) leegte vernietigen() Het wordt gebruikt om de threadgroep en al zijn subgroepen te vernietigen.
17) Booleaans isDaemon() Het test of de thread een daemon-thread is.
18) leegte setDaemon() Het markeert de thread als daemon of gebruikersthread.
19) leegte onderbreken() Het onderbreekt de draad.
twintig) Booleaans isonderbroken() Er wordt getest of de thread is onderbroken.
eenentwintig) statische booleaanse waarde onderbroken() Er wordt getest of de huidige thread is onderbroken.
22) statisch int actieveAantal() Het retourneert het aantal actieve threads in de threadgroep van de huidige thread.
23) leegte checkToegang() Het bepaalt of de momenteel actieve thread toestemming heeft om de thread te wijzigen.
24) statische booleaanse waarde holdLock() Het retourneert waar als en slechts als de huidige thread de monitorvergrendeling op het opgegeven object bevat.
25) statische leegte dumpStack() Het wordt gebruikt om een ​​stacktracering van de huidige thread af te drukken naar de standaardfoutstroom.
26) StackTraceElement[] getStackTrace() Het retourneert een array van stacktrace-elementen die de stackdump van de thread vertegenwoordigen.
27) statisch int opsommen() Het wordt gebruikt om de threadgroep en de subgroep van elke actieve thread naar de opgegeven array te kopiëren.
28) Draad.State getState() Het wordt gebruikt om de status van de thread te retourneren.
29) ThreadGroep getThreadGroup() Het wordt gebruikt om de threadgroep terug te geven waartoe deze thread behoort
30) Snaar toString() Het wordt gebruikt om een ​​tekenreeksrepresentatie van deze thread terug te geven, inclusief de naam, prioriteit en threadgroep van de thread.
31) leegte melden() Het wordt gebruikt om de melding te geven voor slechts één thread die op een bepaald object wacht.
32) leegte notificeerAll() Het wordt gebruikt om een ​​melding te geven aan alle wachtende threads van een bepaald object.
33) leegte setContextClassLoader() Het stelt de context ClassLoader voor de Thread in.
3. 4) Klasselader getContextClassLoader() Het retourneert de context ClassLoader voor de thread.
35) statische Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() Het retourneert de standaardhandler die wordt aangeroepen wanneer een thread abrupt wordt beëindigd vanwege een niet-afgevangen uitzondering.
36) statische leegte setDefaultUncaughtExceptionHandler() Het stelt de standaardhandler in die wordt aangeroepen wanneer een thread abrupt wordt beëindigd vanwege een niet-afgevangen uitzondering.
Ken jij
  • Hoe voer je twee taken uit met twee threads?
  • Hoe multithreading uit te voeren via een anonieme klasse?
  • Wat is de Thread Scheduler en wat is het verschil tussen preventieve planning en time-slicing?
  • Wat gebeurt er als we een thread twee keer starten?
  • Wat gebeurt er als we de methode run() aanroepen in plaats van de methode start()?
  • Wat is het doel van de join-methode?
  • Waarom beëindigt JVM de daemonthread als er geen gebruikersthreads meer over zijn?
  • Wat is de shutdown-hook?
  • Wat is afvalinzameling?
  • Wat is het doel van de methode finalize()?
  • Wat betekent de gc() methode?
  • Wat is synchronisatie en waarom zou u synchronisatie gebruiken?
  • Wat is het verschil tussen gesynchroniseerde methode en gesynchroniseerd blok?
  • Wat zijn de twee manieren om statische synchronisatie uit te voeren?
  • Wat is een impasse en wanneer kan deze optreden?
  • Wat is interthread-communicatie of samenwerking?
Wat zullen we leren in Multithreading
  • Multithreading
  • Levenscyclus van een draad
  • Twee manieren om een ​​thread te maken
  • Hoe u meerdere taken kunt uitvoeren met meerdere threads
  • Onderwerpplanner
  • Een draadje slapen
  • Kunnen we een topic twee keer starten?
  • Wat gebeurt er als we de methode run() aanroepen in plaats van de methode start()?
  • Deelnemen aan een draad
  • Een draad een naam geven
  • Prioriteit van een thread
  • Daemon-draad
  • AfsluitenHook
  • Afvalinzameling
  • Synchronisatie met gesynchroniseerde methode
  • Gesynchroniseerd blok
  • Statische synchronisatie
  • Impasse
  • Communicatie tussen threads