..


Sponsrade länkar

Hantering av gemensamma data i Java

Artikel skriven av Damiano Verda
Sidan 1 av 2

Vi kan tänka oss en delade data som alla andra uppgifter informationsbehandling att utsättas för fler parter. Tänk dig till exempel lagra ett numeriskt värde som representerar euro / dollar. Vi har ett program som kontrollerar regelbundet hur växelkursen och uppdaterar värdet på variabeln. En eller flera andra program, men kommer att använda den uppdaterade informationen för att driva börskursen kurs konvertering.

Lägg märke till hur förvaltningen av en gemensam, även i detta enkla exempel, kräver särskild uppmärksamhet. Tänk dig till exempel att när ett program måste läsa växelkursen att konvertera, även tas emot av ett annat program, en begäran om att ändra växelkursen i sig.

Som körs först? Vilken växelkurs konverteringen är gjort? Problemet, även i vissa fall något mer komplicerad, skulle kunna vara ännu allvarligare.

Föreställ dig att variabeln av intresse är inte elementärt men till exempel, består av en uppsättning data. Det kan nu utföras endast delvis skriver, och sedan följt av en läsning från slutförandet av skrivande. Transaktionerna skulle då ske med en uppsättning värderingar förändrats endast delvis, ger upphov till meningslösa resultat och därför oacceptabel.

Med tanke på existensen av denna typ av problem många programmeringsspråk ge specifika verktyg för hantering av delade variabler. Vi undersöker nedan i synnerhet som denna kategori av problem hanteras i programmeringsspråket Java, en av de mest använda av alla.

Du måste först förstå hur vi kan säkerställa att endast ett program på en gång, eller mer exakt bara en tråd i taget (en tråd är den grundläggande komponenten i en process eller program, med andra ord ett program kan bestå av flera trådar, köras samtidigt) kan komma åt en delad variabel. Den mekanism som tillåter oss att erbjuda denna garanti kallas ömsesidig uteslutning.

Ömsesidig uteslutning

Tänk dig att utveckla en klass (eller en uppsättning data och metoder som är användbara funktioner för att bearbeta de data själv) kallas Variabile_Condivisa följande struktur:






 public class Variabile_Condivisa







 {



   



 euro_dollaro flyta;



   



 euro_sterlina flyta;





   



 Variabile_Condivisa ()



  



 {



     



 euro_dollaro = 1;



     



 euro_sterlina = 1;



  



 }





   



 set_euro_dollaro void (float e_d) = {euro_dollaro e_d;}



   



 set_euro_sterlina void (float e_s) = {euro_sterlina e_s;}





   



 get_euro_dollaro float () {return euro_dollaro;}



   



 get_euro_sterlina float () {return euro_sterlina;}







 }



De två uttalanden, och att euro_dollaro euro_sterlina, representerande eurons växelkurs / dollar och euro / pund och att vi vill dela information mellan flera program (eller mellan flera trådar). De utvecklade metoderna gör att du kan tilldela ett värde till dessa data (och set_euro_dollaro set_euro_sterlina) och läsa dessa värden (och get_euro_dollaro get_euro_sterlina).

Då kan vi identifiera en viss metod (Variabile_Condivisa), som kallas klasskonstruktorn utförs och att skapandet av varje Variabile_Condivisa, i detta fall genom att ställa in värden på variabler och euro_dollaro euro_sterlina är satt till 1.

Sedan skapar vi i vårt program en objekttyp med namnet var Variabile_Condivisa (klassen representerar en uppsättning enheter med gemensamma egenskaper, medan ett objekt representerar en specifik del av denna uppsättning, som kan hänvisas till i programmet ) så här:






 Variabile_Condivisa Variabile_Condivisa var = nytt ();



Som vi kan nu se till att det inte finns några problem i hanteringen av data som delas var? I Java innehåller sökordet (eller sökord) synkroniserade, som accepterar ett objekt som parameter. Genom synkroniserade, kan du definiera, som visas i exemplet, det block av kod:





 synkroniserad (var)







 {



  



 / / Synkroniserad kodblock avgränsad (var)

  





 }



Innan du utför instruktionerna i synkroniserade blocket, förvärvar ett ämne låset på variabeln var eller blockera alla ytterligare tillgång till samma kodblock tills låset släpps, eller tills efter att ha kört hela kvarteret exempel på kod avgränsas av klammerparenteser.

Med andra ord skapar den första tråden (som vi föreställer oss att ringa först) som utför den synkroniserade uttalande (var) faktiskt en barriär som hindrar någon annan tråd att utföra synkroniserade uttalande (VaR) tills den första har inte slutförts genomförandet av den synkroniserade kodblock avgränsas. I dessa block är sedan infogat instruktioner läsa eller skriva delad data.

På detta sätt garanteras ömsesidig uteslutning, som säkerställer att endast en tråd i taget kan komma åt en delad variabel. Noteras bör dock att det är nödvändigt att noggrant välja det objekt som ska skickas som en parameter till synkroniserade. Det måste vara ett objekt gemensamma för alla trådar där du vill skapa en mekanism för ömsesidig uteslutning, till exempel, som i detta fall, den variabel du vill läsa eller redigera.

Tänk dig, på denna punkt, du vill ställa vårt program så att de trådar som vill läsa värdet på variabeln var att parkeras och utvärdera resultaten först efter den första uppdateringen efter deras begäran. Föreställ dig att du vill definiera en synkronisering mekanism mellan läsning och skrivning.

I samma kategori ...
E-Learning
Linux (kurs) Linux (kurs)
Komplett av öppen källkod-system. Från 49 €.
PHP (kurs) PHP (kurs)
Fullständig kurs för att skapa dynamiska webbplatser. Från 49 €.
Ruby och Ruby on Rails (kurs) Ruby och Ruby on Rails (kurs)
Skapa program och webbapplikationer med Ruby och RoR. Från 39 €.
Sponsrade länkar