Multithreading ind Java er en proces med at udføre flere tråde samtidigt.
En tråd er en let underproces, den mindste bearbejdningsenhed. Multiprocessing og multithreading, begge bruges til at opnå multitasking.
dvale dialekt
Men vi bruger multithreading end multiprocessing, fordi tråde bruger et delt hukommelsesområde. De tildeler ikke separat hukommelsesområde, så de sparer hukommelse, og kontekst-skift mellem trådene tager mindre tid end processen.
Java Multithreading bruges mest i spil, animation osv.
Fordele ved Java Multithreading
1) Det blokerer ikke brugeren fordi tråde er uafhængige, og du kan udføre flere handlinger på samme tid.
2) Dig kan udføre mange operationer sammen, så det sparer tid .
3) Tråde er uafhængig , så det påvirker ikke andre tråde, hvis der opstår en undtagelse i en enkelt tråd.
Multitasking
Multitasking er en proces med at udføre flere opgaver samtidigt. Vi bruger multitasking til at udnytte CPU'en. Multitasking kan opnås på to måder:
- Procesbaseret multitasking (multiprocessing)
- Trådbaseret multitasking (Multithreading)
1) Procesbaseret multitasking (multiprocessing)
- Hver proces har en adresse i hukommelsen. Med andre ord tildeler hver proces et separat hukommelsesområde.
- En proces er tungvægtig.
- Omkostningerne ved kommunikation mellem processen er høje.
- Skift fra én proces til en anden kræver noget tid til at gemme og indlæse registre , hukommelseskort, opdatering af lister mv.
2) Trådbaseret multitasking (multithreading)
- Tråde deler det samme adresseområde.
- En tråd er let.
- Omkostningerne ved kommunikation mellem tråden er lave.
Bemærk: Der kræves mindst én proces for hver tråd.
Hvad er tråd i java
En tråd er en let underproces, den mindste bearbejdningsenhed. Det er en separat vej til henrettelse.
Tråde er uafhængige. Hvis der forekommer undtagelser i en tråd, påvirker det ikke andre tråde. Den bruger et delt hukommelsesområde.
Som vist i ovenstående figur udføres en tråd inde i processen. Der er kontekst-switch mellem trådene. Der kan være flere processer inde i OS, og en proces kan have flere tråde.
Bemærk: Der udføres kun én tråd ad gangen.
Java tråd klasse
Java giver Tråd klasse for at opnå trådprogrammering. Tråd klasse giver konstruktører og metoder til at oprette og udføre operationer på en tråd. Trådklassen forlænges Objektklasse og implementerer Runnable interface.
Java-trådsmetoder
S.N. | Modifikator og type | Metode | Beskrivelse |
---|---|---|---|
1) | ugyldig | Start() | Det bruges til at starte udførelsen af tråden. |
2) | ugyldig | løb() | Det bruges til at udføre en handling for en tråd. |
3) | statisk tomrum | søvn() | Den sover en tråd i det angivne tidsrum. |
4) | statisk tråd | nuværende tråd() | Det returnerer en reference til det aktuelt kørende trådobjekt. |
5) | ugyldig | tilslutte() | Den venter på, at en tråd dør. |
6) | int | getPriority() | Det returnerer trådens prioritet. |
7) | ugyldig | setPriority() | Det ændrer trådens prioritet. |
8) | Snor | getName() | Det returnerer navnet på tråden. |
9) | ugyldig | sætnavn() | Det ændrer navnet på tråden. |
10) | lang | getId() | Det returnerer id'et for tråden. |
elleve) | boolesk | er i live() | Den tester om tråden er i live. |
12) | statisk tomrum | udbytte() | Det får det aktuelle trådobjekt til at pause og tillade andre tråde at køre midlertidigt. |
13) | ugyldig | suspendere() | Den bruges til at suspendere tråden. |
14) | ugyldig | Genoptag() | Den bruges til at genoptage den ophængte tråd. |
femten) | ugyldig | hold op() | Den bruges til at stoppe tråden. |
16) | ugyldig | ødelægge() | Det bruges til at ødelægge trådgruppen og alle dens undergrupper. |
17) | boolesk | isDaemon() | Den tester om tråden er en dæmontråd. |
18) | ugyldig | sætDaemon() | Det markerer tråden som dæmon eller brugertråd. |
19) | ugyldig | afbryde() | Det afbryder tråden. |
tyve) | boolesk | er afbrudt() | Den tester om tråden er blevet afbrudt. |
enogtyve) | statisk boolean | afbrudt() | Den tester, om den aktuelle tråd er blevet afbrudt. |
22) | statisk int | activeCount() | Det returnerer antallet af aktive tråde i den aktuelle tråds trådgruppe. |
23) | ugyldig | checkAccess() | Det bestemmer, om den aktuelle tråd har tilladelse til at ændre tråden. |
24) | statisk boolean | holdLock() | Det returnerer sandt, hvis og kun hvis den aktuelle tråd holder monitorlåsen på det angivne objekt. |
25) | statisk tomrum | dumpStack() | Det bruges til at udskrive et stakspor af den aktuelle tråd til standardfejlstrømmen. |
26) | StackTraceElement[] | getStackTrace() | Det returnerer et array af stak-sporelementer, der repræsenterer trådens stak-dump. |
27) | statisk int | opregne() | Det bruges til at kopiere hver aktive tråds trådgruppe og dens undergruppe til det angivne array. |
28) | Tråd.Stat | getState() | Det bruges til at returnere trådens tilstand. |
29) | Trådgruppe | getThreadGroup() | Det bruges til at returnere den trådgruppe, som denne tråd tilhører |
30) | Snor | toString() | Det bruges til at returnere en strengrepræsentation af denne tråd, inklusive trådens navn, prioritet og trådgruppe. |
31) | ugyldig | underrette() | Det bruges til kun at give besked for én tråd, der venter på et bestemt objekt. |
32) | ugyldig | notifyAll() | Det bruges til at give besked til alle ventende tråde for et bestemt objekt. |
33) | ugyldig | setContextClassLoader() | Det sætter konteksten ClassLoader for tråden. |
3. 4) | ClassLoader | getContextClassLoader() | Det returnerer konteksten ClassLoader for tråden. |
35) | statisk Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Det returnerer den standardbehandler, der er påberåbt, når en tråd pludselig afsluttes på grund af en ufanget undtagelse. |
36) | statisk tomrum | setDefaultUncaughtExceptionHandler() | Den indstiller standardbehandleren, der aktiveres, når en tråd brat afsluttes på grund af en ufanget undtagelse. |
- Hvordan udfører man to opgaver ad to tråde?
- Hvordan udfører man multithreading af anonym klasse?
- Hvad er trådplanlægningen, og hvad er forskellen mellem forebyggende planlægning og tidsudskæring?
- Hvad sker der, hvis vi starter en tråd to gange?
- Hvad sker der, hvis vi kalder run()-metoden i stedet for start()-metoden?
- Hvad er formålet med join-metoden?
- Hvorfor afslutter JVM dæmontråden, hvis der ikke er nogen brugertråde tilbage?
- Hvad er nedlukningskrogen?
- Hvad er affaldsindsamling?
- Hvad er formålet med finalize() metoden?
- Hvad betyder gc()-metoden?
- Hvad er synkronisering og hvorfor bruge synkronisering?
- Hvad er forskellen mellem synkroniseret metode og synkroniseret blok?
- Hvad er de to måder at udføre statisk synkronisering på?
- Hvad er dødvande, og hvornår kan det opstå?
- Hvad er intertrådskommunikation eller samarbejde?
- Multithreading
- En tråds livscyklus
- To måder at oprette en tråd på
- Sådan udføres flere opgaver af flere tråde
- Trådplanlægger
- Sovende en tråd
- Kan vi starte en tråd to gange?
- Hvad sker der, hvis vi kalder run()-metoden i stedet for start()-metoden?
- Deltager i en tråd
- Navngivning af en tråd
- Prioritering af en tråd
- Dæmon tråd
- ShutdownHook
- Dagrenovation
- Synkronisering med synkroniseret metode
- Synkroniseret blok
- Statisk synkronisering
- dødvande
- Kommunikation mellem tråde