..


Link-uri sponsorizate

De gestionare a datelor partajate în Java

Articol scris de Damiano Verda
Pagina 1 din 2

Ne putem gândi la un de date comune, precum orice alte sarcini de prelucrare a informaţiilor care urmează să fie expus la mai multe partide. Imaginaţi-vă, de exemplu, păstrează o valoare numerică reprezentând euro / dolar. Avem un program care verifică periodic ceea ce cursul de schimb şi actualizează valoarea variabilei. Una sau mai multe alte programe, cu toate acestea, va folosi informaţiile actualizate pentru a funcţiona de conversie rata de schimb de preţ.

Observaţi modul în care administrarea unei comun, chiar şi în acest exemplu simplu, nevoie de o atenţie specială. Imaginaţi-vă, de exemplu, faptul că în timp ce o aplicatie are nevoie pentru a citi cursul de schimb pentru a converti, de asemenea, este primit de către un alt program, o cerere de modificare a cursului de schimb în sine.

Care este executat primul? Care, cu rata de conversie de schimb se face? Problema, chiar şi în unele cazuri, ceva mai complexe, ar putea fi chiar mai severe.

Imaginaţi-vă faptul că variabila de interese nu este elementar, dar, de exemplu, constă dintr-un set de date. Acesta poate fi efectuată numai acum a scrie parţiale, şi apoi urmată de o lectură de la terminarea scrierii. Tranzacţiilor s-ar fi efectuat cu un set de valori modificate doar parţial, dând naştere la rezultate sens şi, prin urmare, inacceptabil.

Având în vedere existenţa acestui tip de probleme de multe limbaje de programare oferă instrumente specifice de gestionare a variabilelor partajate. Vom examina mai jos, în special, ca această categorie de probleme este tratată în limbajul de programare Java, una dintre cele mai utilizate de toate.

Trebuie, mai întâi să înţeleagă modul în care ne putem asigura că doar un singur program la o dată, sau mai exact de un singur fir la un moment dat (un fir este componenta de bază a unui proces sau a unui program, cu alte cuvinte, un program poate fi compus din mai multe fire, rula simultan) pot accesa o variabilă în comun. Mecanismul care ne permite să oferim această garanţie se numeşte excludere reciprocă.

De excludere reciprocă

Imaginaţi-vă o clasă în curs de dezvoltare (sau un set de date şi metode, care este de funcţii utile pentru a procesa datele în sine), numit Variabile_Condivisa structurat după cum urmează:






 publice clasa Variabile_Condivisa







 {



   



 euro_dollaro float;



   



 euro_sterlina float;





   



 Variabile_Condivisa ()



  



 {



     



 euro_dollaro = 1;



     



 euro_sterlina = 1;



  



 }





   



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



   



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





   



 get_euro_dollaro float () {return euro_dollaro;}



   



 get_euro_sterlina float () {return euro_sterlina;}







 }



Cele două declaraţii, şi că euro_sterlina euro_dollaro, reprezentând rata de schimb euro / dolar şi euro / lira sterlină şi că dorim pentru a partaja informaţii între mai multe programe (sau între mai multe fire). Metodele dezvoltate vă permit să atribuiţi o valoare la aceste date (şi set_euro_dollaro set_euro_sterlina) şi citeşte aceste valori (şi get_euro_dollaro get_euro_sterlina).

Apoi vom identifica o anumită metodă (Variabile_Condivisa), care este numit constructorul clasei este executat şi că crearea de fiecare Variabile_Condivisa, în acest caz, prin stabilirea valorilor de variabile şi euro_sterlina euro_dollaro sunt setate la 1.

Apoi am crea în programul nostru de un tip de obiect cu nume var Variabile_Condivisa (clasa reprezintă un set de entităţi cu caracteristici comune, în timp ce un obiect reprezintă un element specific al acestei serii, care poate fi consultat în cadrul programului ) astfel:






 Variabile_Condivisa Variabile_Condivisa var = new ();



Aşa cum ne putem asigura acum că nu există probleme în gestionarea de date partajate var? Limba Java prevede cuvinte cheie (sau cuvinte cheie) sincronizate, care accepta orice obiect ca parametru. Prin sincronizate, puteţi defini, aşa cum se arată în exemplul, bloc de cod:





 sincronizate (var)







 {



  



 / / Sincronizat bloc de cod delimitat (var)

  





 }



Înainte de a efectua instrucţiunile din blocul sincronizate, dobândeşte, orice fir de blocare pe var variabila, sau bloca toate căile de acces în continuare la acelaşi bloc de cod până la blocare este eliberat, sau până când după rularea întregului bloc exemplu de cod delimitat de acolade.

Cu alte cuvinte, primul fir de executie (pe care ne imaginam la primul apel), care efectuează declaraţia sincronizate (var), de fapt, creeaza o bariera care previne orice alt fir pentru a executa declaraţia sincronizate (var) până la prima nu a finalizat executarea blocului sincronizate de delimitat cod. În aceste blocuri sunt apoi introduse instrucţiuni citi sau scrie date partajate.

În acest fel este garantat excludere reciprocă, ceea ce garantează faptul că doar un singur fir la un moment dat poate accesa o variabilă în comun. Trebuie remarcat, totuşi, că este necesar să se aleagă cu grijă obiectul care urmează să fie trecut ca un parametru de sincronizat. Acesta trebuie să fie un obiect comun pentru toate firele în care doriţi să creaţi un mecanism de excludere reciprocă, de exemplu, ca în acest caz, variabila pe care doriţi să citiţi sau să editaţi.

Imaginaţi-vă, la acest punct, doriţi să setaţi programul nostru, astfel încât firele care doriţi să citiţi valoarea variabilei var care urmează să fie puse în aşteptare şi evaluează rezultatele numai după prima actualizare la cererea acestora. Imaginaţi-vă că doriţi să definească un mecanism de sincronizare între citirea şi scrierea.

În aceeaşi categorie ...
E-Learning
Linux (Curs) Linux (Curs)
Ghid complet pentru open-source de sistem. De la 49 €.
PHP (Curs) PHP (Curs)
Ciclu complet pentru crearea de site-uri Web dinamice. De la 49 €.
Ruby şi Ruby on Rails (Curs) Ruby şi Ruby on Rails (Curs)
Crearea aplicatii software si web cu Ruby şi RoR. De la 39 €.
Link-uri sponsorizate