Hva er samtidighet i Java?
I dagens verden utvikler alt seg raskt. Det er alltid et forbedringsomfang i alt. Slik er det også med programmeringsspråket vårt. I dag med våre moderne teknologier, forventer vi at ting skal gjøres enkelt og raskt. For å gjøre flere ting samtidig eller for å gjøre flere ting samtidig oppstod konseptet samtidighet. Så hva som faktisk er samtidig, hva er det for bruken, hvorfor er dette virkelig nødvendig og mange flere. Vi vil prøve å berøre slike spørsmål og svare på dem i denne artikkelen én etter én. Så la oss ta vår diskusjon til en veldig grunnleggende felles seksjon som er definisjonen av samtidighet. I dette emnet skal vi lære om What is Concurrency in Java.
Definisjon av samtidighet?
Så hva samtid er egentlig? Vel, for å svare på det, la oss ta et vanlig scenario. Anta at mens du leser denne artikkelen, prøver du å gjøre flere ting samtidig, kan det være at du prøver å lage et notat, kanskje du prøver å forstå det eller tenke på noen ting. Så med enkle ord prøver du å gjøre flere ting parallelt. Dette er hva en samtidighet betyr. Samtidig er ganske enkelt å utføre flere oppgaver parallelt med hverandre. Vi vil diskutere samtidighet i denne artikkelen i omfanget av Java som programmeringsspråk.
Egentlig, i Java eller generelt på hvilket som helst programmeringsspråk, er det tråden som er ansvarlig for å bære samtidighet. Den grunnleggende rollen til disse trådene er å legge til rette for parallell utførelse av oppgaver. La oss i mellomtiden ha en grunnleggende definisjon av tråd.
Så hva er en tråd?
En tråd er en lett prosess med sin egen samtalestabel. Imidlertid har en tråd et privilegium å få tilgang til delte data fra andre tråder som kjøres under samme prosess. Innenfor en Java-applikasjon kan vi bruke mange tråder for å oppnå parallell prosessering eller samtidighet.
La oss nå gå til vårt neste emne, som er,
Samtidig i Java-definisjon?
Så i Java eller et hvilket som helst annet programmeringsspråk som C #, etc., har alle OOPs språk et konsept av tråd. I Java har vi forskjellige prosesser som kjører ved å lage forskjellige tråder for å oppnå samtidighet
Så etter denne enkle definisjonen, la oss diskutere det nye emnet som er:
Hva gjør java-applikasjonen samtidig?
Den første klassen, som man trenger for å lage en java-applikasjon samtidig, er java.lang.Tread klasse. java.lang.Tread klasse er ansvarlig for alle samtidighetskonsepter i programmeringsspråk for Java. Etter dette har vi java.lang.Runnable grensesnitt for å abstrahere trådoppførselen ut av trådklassen.
Andre klasser som vi trenger for å bygge en avansert applikasjon, vil bli brukt fra pakken java.util.concurrent lagt til i Java 1.5.
Nå med det har vi kommet til et nytt spørsmål som er:
Er Java Concurrency virkelig så enkel?
Ettersom det ser ut som å implementere samtidighet i Java er ganske enkelt. Imidlertid er det egentlig ikke slik. La oss sørge for det.
Vår diskusjon ovenfor gir generelt et inntrykk av at samtidighet faktisk er et enkelt, godt konsept og ganske enkelt å implementere. Vel, hvis vi overvåker på en bedre måte og prøver å forstå det, finner vi ut at det krever en god mengde forståelse av grunnleggende konsepter, samt en grundig forståelse av hva vi trenger å oppnå.
Hvis vi sammenligner samtidig applikasjoner og en enkelt gjenget applikasjon, finner vi generelt at en samtidig applikasjon er kompleks når det gjelder utforming og forståelse. Kode utført av flere tråder krever spesiell oppmerksomhet og ressurser for tilgang til delte data. Feil dukker opp på grunn av feil trådsynkronisering er vanskelig å feilsøke og fikse. I de fleste scenarier blir ikke disse feilene identifisert i den innledende fasen, og faktisk oppdages de i prod-modus, som er enda vanskeligere å reprodusere.
Bortsett fra feil og vanlige feil, krever samtidig tråder mer ressurser for å kjøre applikasjonen
Problemer og forbedring i samtidighet - Forklaring med eksempel
Så i utgangspunktet er det to typer problemer som tilordnes på grunn av samtidighet. Disse problemene kan bredt klassifiseres i to kategorier
- Trådinterferensfeil
- Feil i minnekonsistens
La oss forstå hver enkelt etter en
Trådinterferensfeil - La oss forstå med et enkelt eksempel.
Anta at vi har en tellerfunksjon, hvis grunnleggende rolle er å øke telleren eller telle for et tall. Anta at vi har to tråder, tråd A og tråd B. Anta at tråd A leser begynnelsesverdien som 0. Nå følger følgende trinn sekvensielt.
- Tråd A leser begynnelsesverdien som 0
- Tråd B leser begynnelsesverdien som 0
- Tråd En økningsverdi med 1. Den nye verdien er nå 1
- Tråd B øker også parallelt verdien til 1.
- Tråd A skriver oppdatert verdi som er 1 i minnecellen
- Tråd B gjentar også det samme trinnet, som er skrevet i en oppdatert verdi på minnecellen på 1
Så her oppstår problemet. To tråder A & B, kjør koden to ganger og forventet verdi er 2, men det som reflekteres er 1. Dette er hovedproblemet hva flere tråder kan forårsake
Hvordan dette kunne løses?
Trådinterferensfeil kan løses ved å synkronisere tilgang til delte variabler. Vi må holde synkronisering for de oppdaterte verdiene mellom de delte dataene
La oss se på den andre typen feil
Feil i minnekonsistens
Minneinkonsekvensfeil forekommer vanligvis når forskjellige tråder prøver å lese eller har inkonsekvente synspunkter på samme stykke data. Dette skjer vanligvis når den første tråden oppdaterer noen delte data, og denne oppdaterte verdien blir ikke formidlet til andre eller andre tråder, og de leser gamle data.
La oss se hvorfor dette skjer?
Det kan være mange årsaker til dette. Vanligvis gjør kompilatoren generelt mange optimaliseringer av applikasjonen for å forbedre ytelsen. Det kan også oppdatere instruksjonssekvenser for å optimalisere ytelsen. Selv generelt prosessorer prøver også å optimalisere koder, for eksempel kan en CPU lese gjeldende verdi av en variabel fra et hurtigminne eller et midlertidig register i stedet for hovedminnet
Konklusjon - Hva er samtidighet i Java?
Samtidig er en veldig viktig funksjon i ethvert OOPs språk. Threading gir oss funksjonen til å utføre flere prosesser parallelt med hverandre. Det hjelper oss å utføre vår komplekse oppgave raskere. Imidlertid, med fordeler, har samtid få ulemper også. Å bruke tråding fører til mye ressursbruk
Anbefalte artikler
Dette har vært en guide til hva som er samtidighet i Java. Her har vi diskutert Problemene og forbedring i samtidighet med eksempel. Du kan også gå gjennom andre foreslåtte artikler for å lære mer -
- Hva er multithreading i java?
- Hvordan koble databasen i Java?
- Hva er multithreading i java?
- Hva er J2EE?