..


Sponsorerede links

Forvaltning af delte data i Java

Artikel skrevet af Damiano Verda
Side 1 af 2

Vi kan tænke på en delt data som enhver andet edb-opgaver, som skal udsættes for flere parter. Forestil dig, for eksempel en numerisk værdi, som repræsenterer euro / dollar butik. Vi har et program, der kontrollerer jævnligt, hvad valutakursen og opdaterer værdien af ​​den variable. En eller flere andre programmer, men vil bruge den opdaterede oplysninger til at varetage driften af ​​valutakursomregning pris.

Læg mærke til, hvordan forvaltningen af ​​en fælles, selv i dette simple eksempel, har brug for særlig opmærksomhed. Forestil dig for eksempel, at mens et program har brug for at læse valutakursen til at konvertere, er også modtaget af et andet program, en anmodning om at ændre valutakursen selv.

Hvilket er udført først? Hvilke valutakursomregning er gjort? Problemet, endda i nogle tilfælde lidt mere kompleks, kunne endnu mere alvorlig.

Forestil dig, at den variable af interesse ikke er elementære, men for eksempel består af et sæt af data. Det kan nu udføres kun delvist skrive, og derefter efterfulgt af en læsning fra afslutningen af ​​skriveprocessen. Transaktionerne vil derefter blive udført med et sæt af værdier ændres kun delvist, giver anledning til meningsløse resultater, og derfor uacceptabel.

I betragtning af eksistensen af denne form for problemer, som mange programmeringssprog give specifikke værktøjer til forvaltning af fælles variabler. Vi undersøger nedenfor, især eftersom denne kategori af problemer håndteres i programmeringssproget Java, en af de mest anvendte af alle.

Du først nødt til at forstå, hvordan vi kan sikre, at kun ét program på én gang, eller mere præcist kun én tråd ad gangen (en tråd er den grundlæggende komponent i en proces eller et program, med andre ord et program kan bestå af flere tråde, køre samtidig) kan få adgang til en delt variabel. Den mekanisme, der tillader os at tilbyde denne garanti kaldes gensidig udelukkelse.

Gensidig udelukkelse

Forestil dig at udvikle en klasse (eller et sæt af data og metoder, der er nyttige funktioner til at behandle oplysningerne selv) kaldes Variabile_Condivisa struktureret som følger:






 public class Variabile_Condivisa







 {



   



 euro_dollaro flyde;



   



 euro_sterlina flyde;





   



 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 to udsagn, og at euro_dollaro euro_sterlina, der repræsenterer kursen euro / dollar og euro / pund, og at vi ønsker at dele information mellem flere programmer (eller mellem flere tråde). De udviklede metoder gør det muligt at tildele en værdi til disse data (og set_euro_dollaro set_euro_sterlina) og læse disse værdier (og get_euro_dollaro get_euro_sterlina).

Så kan vi identificere en bestemt metode (Variabile_Condivisa), som kaldes klassen konstruktøren udføres, og at oprettelsen af hver Variabile_Condivisa, i dette tilfælde ved at sætte værdier i variabler og euro_dollaro euro_sterlina er sat til 1.

Så vi skaber i vores program en objekttype ved navn var Variabile_Condivisa (klassen repræsenterer et sæt af enheder med fælles karakteristika, mens et objekt repræsenterer et bestemt element i denne række, som kan refereres til i programmet ) på denne måde:






 Variabile_Condivisa Variabile_Condivisa var = new ();



Som vi nu kan sikre, at der ikke er problemer i forvaltningen af ​​data deles var? Java-sproget indeholder søgeordet (eller søgeord) synkroniserede, der accepterer ethvert objekt som en parameter. Gennem synkroniseret, kan du definere, som vist i eksemplet, den blok af kode:





 synkroniseret (Var)







 {



  



 / / Synchronized blok af kode afgrænset (Var)

  





 }



Før udførelse af instruktionerne i den synkroniserede blok, får enhver tråd låsen på den variable var, eller blokere al yderligere adgang til den samme blok af kode, indtil låsen er frigivet, eller indtil efter at have kørt hele blokken eksempel på kode afgrænset af krøllede parenteser.

Med andre ord, faktisk den første tråd (som vi forestiller os at kalde første), der udfører den synkroniserede erklæring (Var) skaber en barriere, der forhindrer enhver anden tråd til at udføre de synkroniserede erklæring (Var), indtil den første ikke har fuldført udførelsen af ​​de synkroniserede blok af kode afgrænset. I disse blokke er derefter indsættes instruktioner læse eller skrive delte data.

På denne måde er det garanteret gensidig udelukkelse, der sikrer, at kun én tråd ad gangen kan få adgang til en delt variabel. Det skal dog bemærkes, at det er nødvendigt omhyggeligt at vælge det objekt, der skal videregives som en parameter til synkroniseret. Det skal være et objekt fælles for alle de tråde, hvor du vil oprette en mekanisme for gensidig udelukkelse, for eksempel, som i dette tilfælde, den variabel, du ønsker at læse eller redigere.

Forestil dig, på dette tidspunkt, vil have dig til at sætte vores program, så de tråde, der ønsker at aflæse værdien af ​​variablen var at blive sat på hold, og evaluere resultaterne først efter den første opdatering efter deres anmodning. Forestil dig, at du ønsker at definere en synkronisering mekanisme mellem læsning og skrivning.

I den samme kategori ...
E-Learning
Linux (Kursus) Linux (Kursus)
Komplet guide til open source-system. Fra 49 €.
PHP (Kursus) PHP (Kursus)
Fuld kursus for at skabe dynamiske web-sites. Fra 49 €.
Ruby og Ruby on Rails (Kursus) Ruby og Ruby on Rails (Kursus)
Opret software og web-applikationer med Ruby og RoR. Fra 39 €.
Sponsorerede links