Hvad er samtidighed i Java?
I nutidens verden udvikler alt sig hurtigt. Der er altid et omfang af forbedringer i alt. Det er også tilfældet med vores programmeringssprog. I dag forventer vi med vores moderne teknologier, at tingene skal ske let og hurtigt. For at gøre flere ting på samme tid eller for at gøre flere ting samtidigt opstod begrebet samtidighed. Så hvad der faktisk er samtidig, hvad er dets anvendelse, hvorfor er dette virkelig nødvendigt og mange flere. Vi vil forsøge at røre ved sådanne spørgsmål og besvare dem i denne artikel en efter en. Så lad os bringe vores diskussion til et meget grundlæggende fælles afsnit, der er definitionen af samtidighed. I dette emne skal vi lære om Hvad er konkurrence i Java.
Definition af samtidighed?
Så hvad er samtidig? Nå, for at svare på det, lad os tage et fælles scenario. Antag, at mens du læser denne artikel, prøver du at gøre flere ting samtidig, kan du være, at du prøver at lave en note, måske prøver du at forstå det eller tænke nogle ting. Så i enkle ord forsøger du at gøre flere ting parallelt. Dette er, hvad en samtidighed betyder. Samtidig udfører simpelthen flere opgaver parallelt med hinanden. Vi vil diskutere samtidighed i denne artikel inden for rammerne af Java som programmeringssprog.
Faktisk i Java eller generelt på ethvert programmeringssprog er det den tråd, der er ansvarlig for at bære samtidighed. Disse tråders grundlæggende rolle er at lette parallel udførelse af opgaver. Lad os i mellemtiden få en grundlæggende definition af tråd.
Så hvad er en tråd?
En tråd er en letvægtsproces med sin egen opkaldsstabel. Imidlertid har en tråd et privilegium at få adgang til delte data fra andre tråde, der udføres under den samme proces. I en Java-applikation kan vi bruge mange tråde til at opnå parallel behandling eller samtidighed.
Lad os nu gå til vores næste emne, som er,
Samtidig i Java-definition?
Så i Java eller et hvilket som helst andet programmeringssprog som C # osv. Har alle OOPs sprog et koncept af trådning. I Java har vi forskellige processer, der kører ved at lave forskellige tråde for at opnå samtidighed
Så efter denne enkle definition, lad os diskutere vores nye emne, som er:
Hvad gør java-applikationen samtidigt?
Den første klasse, som man har brug for for at gøre en java-applikation samtidigt, er java.lang.Thread-klassen. java.lang.Tread-klassen er ansvarlig for alle samtidige koncepter i Java-programmeringssprog. Efter dette har vi java.lang.Runnable interface til at abstrahere trådadfærden ud af trådklassen.
Anden klasse, som vi bliver nødt til at opbygge et avanceret program, vil blive brugt fra java.util.concurrent-pakken, der er tilføjet i Java 1.5.
Nu med det er vi nået et nyt spørgsmål, som er:
Er Java Concurrency virkelig så enkel?
Da det ser ud til, at implementering af samtidighed i Java er ganske enkel. Men det er virkelig ikke sådan. Lad os sørge for det.
Vores ovenstående diskussion giver generelt et indtryk af, at samtidighed faktisk er et enkelt, godt koncept og ganske let at implementere. Nå, hvis vi overvåger på en mere bedre måde og prøver at forstå det, finder vi ud af, at det kræver en god mængde forståelse af grundlæggende koncepter såvel som en grundig forståelse af, hvad vi har brug for at opnå.
Hvis vi sammenligner samtidige applikationer og en enkelt gevind applikation, finder vi generelt, at en samtidig applikation er kompleks med hensyn til design og forståelse. Kode udført af flere tråde kræver særlig opmærksomhed og ressourcer til adgang til delte data. Fejl, der popper på grund af forkert trådsynkronisering er vanskelige at fejlsøge og rette. I de fleste af scenarierne identificeres disse fejl også ikke i den indledende fase, detekteres faktisk i prod-tilstand, hvilket er endnu sværere at gengive.
Bortset fra fejl og almindelige defekter kræver samtidige tråde flere ressourcer til at køre applikationen
Problemer og forbedring i samtidighed - Forklaring med eksempel
Så dybest set er der to typer problemer, som tildeles på grund af samtidighed. Disse problemer kan bredt klassificeres i to kategorier
- Trådinterferensfejl
- Fejl i hukommelseskonsistensen
Lad os forstå hver for en
Trådinterferensfejl - Lad os forstå med et simpelt eksempel.
Antag, at vi har en tællerfunktion, hvis grundlæggende rolle er at øge tælleren eller tællingen af et tal. Antag nu, at vi har to tråde, tråd A og tråd B. Antag, at tråd A læser startværdien som 0. Nu følger de følgende trin sekventielt.
- Tråd A læser startværdien som 0
- Tråd B læser startværdien som 0
- Tråd En stigningsværdi med 1. Den nye værdi er nu 1
- Tråd B øger også parallelt værdien til 1.
- Tråd A skriver en opdateret værdi, der er 1 i hukommelsescellen
- Tråd B gentager også det samme trin, der er skrevet i den opdaterede hukommelsescelleværdi på 1
Så her opstår problemet. To tråde A & B, udfør koden to gange, og den forventede værdi er 2, men hvad der reflekteres er 1. Dette er det største problem, hvad flere tråde kan forårsage
Hvordan dette kunne løses?
Trådinterferensfejl kan løses ved at synkronisere adgang til delte variabler. Vi er nødt til at holde synkroniseringen for de opdaterede værdier mellem de delte data
Lad os med dette undersøge den anden type fejl
Hukommelseskonsistensfejl
Hukommelsesinkonsekvensfejl opstår normalt, når forskellige tråde prøver at læse eller har inkonsekvente synspunkter på det samme stykke data. Dette sker normalt, når den første tråd opdaterer nogle delte data, og denne opdaterede værdi spreder ikke til anden eller forskellige tråde, og de læser gamle data.
Lad os se, hvorfor det sker?
Der kan godt være mange årsager til dette. Normalt gør compileren generelt masser af flere optimeringer til applikationen for at forbedre ydelsen. Det kan også opdatere instruktionssekvenser for at optimere ydelsen. Selv generelt processorer forsøger også at optimere koder, for eksempel kan en CPU læse den aktuelle værdi af en variabel fra en cachehukommelse eller et midlertidigt register i stedet for hovedhukommelsen
Konklusion - Hvad er konkurrent i Java?
Samtidig er en meget vigtig funktion i ethvert OOPs sprog. Threading giver os funktionen til at udføre flere processer parallelt med hinanden. Det hjælper os med at udføre vores komplekse opgave hurtigere. Men med fordele har samtidighed kun få ulemper. Brug af gevind giver kraftig brug af ressourcer
Anbefalede artikler
Dette har været en guide til hvad der er samtidighed i Java. Her har vi drøftet Problemer og forbedring af samtidighed med eksempel. Du kan også gennemgå vores andre foreslåede artikler for at lære mere -
- Hvad er multithreading i java?
- Hvordan tilsluttes database i Java?
- Hvad er multithreading i java?
- Hvad er J2EE?