Vad är samtidighet i Java? - Komplett guide till samtidighet i Java

Innehållsförteckning:

Anonim

Vad är samtidighet i Java?

I dagens värld utvecklas allt snabbt. Det finns alltid ett förbättringsomfång i var och en. Så är fallet med vårt programmeringsspråk. I dag med vår moderna teknik förväntar vi oss att saker ska göras med lätthet och med snabb hastighet. För att göra flera saker samtidigt eller för att göra flera saker samtidigt uppstod begreppet samtidighet. Så vad som samtidigt är, vad är det för användning, varför behövs det verkligen och många fler. Vi kommer att försöka beröra sådana frågor och besvara dem i den här artikeln en efter en. Så låt oss föra vår diskussion till ett mycket grundläggande gemensamt avsnitt som är definitionen av samtidighet. I det här ämnet kommer vi att lära oss om Vad är Concurrency i Java.

Definition av samtidighet?

Så vad är samtidigt faktiskt? Tja, för att svara på det låt oss ta ett vanligt scenario. Antag att när du läser den här artikeln försöker du göra flera saker samtidigt kan du försöka göra en anteckning också, kanske du försöker förstå den eller tänka på några saker. Så i enkla ord försöker du göra flera saker parallellt. Detta är vad en samtidighet betyder. Samtidighet är helt enkelt att utföra flera uppgifter parallellt med varandra. Vi kommer att diskutera samtidighet i denna artikel inom ramen för Java som programmeringsspråk.

Egentligen i Java eller i allmänhet på något programmeringsspråk är det tråden som ansvarar för att bära samtidighet. Dessa tråders grundläggande roll är att underlätta parallellt utförande av uppgifter. Låt oss samtidigt ha en grundläggande definition av tråd.

Så vad är en tråd?

En tråd är en lättprocess med sin egen samtalstack. Men en tråd har ett privilegium att få åtkomst till delade data från andra trådar som körs under samma process. Inom en Java-applikation kan vi använda många trådar för att uppnå parallell behandling eller samtidighet.

Låt oss nu gå till vårt nästa ämne, som är,

Samtidighet i Java-definition?

Så i Java eller något annat programmeringsspråk som C #, etc. har alla OOP: s språk ett begrepp om trådning. I Java har vi olika processer som körs genom att göra olika trådar för att uppnå samtidighet

Så efter denna enkla definition, låt oss diskutera vårt nya ämne som är:

Vad gör java-applikationen samtidigt?

Den första klassen, som man behöver för att göra en java-applikation samtidigt, är java.lang.Tread-klassen. java.lang.Tread-klassen ansvarar för alla samtidighetskoncept i programmeringsspråket Java. Efter detta har vi java.lang.Runnable interface för att abstrahera trådbeteendet ur trådklassen.

Annan klass som vi kommer att behöva bygga en avancerad applikation kommer att användas från paketet java.util.concurrent som läggs till i Java 1.5.

Nu med det har vi nått en ny fråga som är:

Är Java Concurrency verkligen så enkelt?

Eftersom det verkar som att implementera samtidighet i Java är ganska enkelt. Men det är verkligen inte så. Låt oss se till det.

Vår diskussion ovan ger i allmänhet ett intryck av att samtidighet verkligen är ett enkelt, bra koncept och ganska lätt att genomföra. Tja, om vi övervakar på ett bättre sätt och försöker förstå det, upptäcker vi att det kräver en god mängd förståelse för grundläggande koncept samt en grundlig förståelse av vad vi behöver för att uppnå.

Om vi ​​jämför jämförbara applikationer och en enda gängad applikation finner vi i allmänhet att en samtidig applikation är komplex när det gäller design och förståelse. Kod exekverad av flera trådar kräver särskild uppmärksamhet och resurser för åtkomst till delad data. Fel som dyker upp på grund av fel trådsynkronisering är svåra att felsöka och fixa. I de flesta scenarier identifieras dessa buggar inte i den inledande fasen, detekteras faktiskt i prod-läge, vilket är ännu svårare att reproducera.

Bortsett från buggar och vanliga defekter kräver samtidiga trådar mer resurser för att köra applikationen

Problem och förbättring av samtidighet - Förklaring med exempel

Så i princip finns det två typer av problem som tilldelas på grund av samtidighet. Dessa problem kan i stort sett klassificeras i två kategorier

  • Trådstörningsfel
  • Fel i minneskonsistens

Låt oss förstå var och en för en

Trådstörningsfel - Låt oss förstå med ett enkelt exempel.

Anta att vi har en räknefunktion, vars grundläggande roll är att öka räknaren eller räkna för ett nummer. Anta nu att vi har två trådar, tråd A och tråd B. Anta att tråd A läser initialvärdet som 0. Nu följer följande steg i följd.

  1. Tråd A läser initialvärdet som 0
  2. Tråd B läser initialvärdet som 0
  3. Tråd Ett ökande värde med 1. Det nya värdet är nu 1
  4. Tråd B ökar också parallellt värdet till 1.
  5. Tråd A skriver uppdaterat värde som är 1 i minnecellen
  6. Tråd B upprepar också samma steg, som är skrivet i minnescells uppdaterade värde på 1

Så här uppstår problemet. Två trådar A & B, kör koden två gånger och det förväntade värdet är 2 men vad som återspeglas är 1. Detta är huvudproblemet som flera trådar kan orsaka

Hur kan detta lösas?

Trådstörningsfel kan lösas genom att synkronisera åtkomst till delade variabler. Vi måste hålla synkroniserat för de uppdaterade värdena mellan den delade informationen

Låt oss med detta undersöka den andra typen av fel

Fel i minneskonsistens

Minneinkonsekvensfel uppstår vanligtvis när olika trådar försöker läsa eller har inkonsekventa vyer på samma data. Detta händer vanligtvis när den första tråden uppdaterar delad data, och det uppdaterade värdet sprids inte till andra eller olika trådar, och de läser gamla data.

Låt oss se varför detta händer?

Det kan finnas många orsaker till detta. Vanligtvis gör kompilatorn vanligtvis massor av flera optimeringar för applikationen för att förbättra prestandan. Det kan också uppdatera instruktionssekvenser för att optimera prestanda. Även i allmänhet försöker processorer också att optimera koder, till exempel kan en CPU läsa det aktuella värdet för en variabel från ett cacheminne eller ett tillfälligt register istället för huvudminnet

Slutsats - Vad är samtidighet i Java?

Samtidighet är en mycket viktig funktion i alla OOP: s språk. Trådning ger oss funktionen att utföra flera processer parallellt med varandra. Det hjälper oss att utföra vår komplexa uppgift snabbare. Men med proffs har samtidighet också få nackdelar. Att använda trådar orsakar tung användning av resurser

Rekommenderade artiklar

Detta har varit en guide till vad som är likvärdighet i Java. Här har vi diskuterat problemen och förbättringen av samtidighet med exempel. Du kan också gå igenom våra andra föreslagna artiklar för att lära dig mer -

  1. Vad är multithreading i java?
  2. Hur ansluter jag till databas i Java?
  3. Vad är multithreading i java?
  4. Vad är J2EE?