- Multithreading
- Multitasking
- Procesgebaseerde multitasking
- Thread-gebaseerde multitasking
- 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.
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. |
- 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?
- 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