..


Sponzorované odkazy

Správa zdieľaných dát v Jave

Článok napísal Damiano Verde
Strana 1 z 2

My môžeme myslieť na zdieľaných dát, ako všetky ďalšie úlohy spracovanie informácií musí byť vystavená na viac strán. Predstavte si napríklad, uloženie číselnej hodnoty predstavujúce euro / dolár. Máme program, ktorý pravidelne kontroluje, čo kurzu a aktualizuje hodnotu premennej. Jeden alebo viac iných programov, ale bude používať aktualizované informácie k prevádzke výmenného kurzu cenu.

Všimnite si, ako vedenie spoločné, a to aj v tomto jednoduchom príklade, je potrebné venovať osobitnú pozornosť. Predstavte si napríklad, že keď aplikácia potrebuje čítať kurzu zmeniť, je tiež dostane iného programu, žiadosť o zmenu kurzu sám.

Ktorý je vykonaný ako prvý? Výmenného kurzu, ktorý prebieha? Problém je dokonca v niektorých prípadoch trochu zložitejšie, môže byť ešte vážnejšie.

Predstavte si, že premenná záujem nie je základné, ale napríklad, pozostáva zo súboru dát. Môže sa vykonávať iba čiastočné písať, a potom nasleduje čítanie z dokončenia písania. Transakcia by potom bola vykonaná so súborom hodnôt, zmenila len čiastočne, ktoré viedli k nezmyselným výsledkom, a teda neprijateľné.

Vzhľadom na existenciu tohto druhu problémov mnohých programovacích jazykoch poskytovať konkrétne nástroje pre správu zdieľaných premenných. Budeme skúmať ďalej najmä v tejto kategórii problémov je riešený v programovacom jazyku Java, jeden z najpoužívanejších zo všetkých.

Najprv musíte pochopiť, ako môžeme zaistiť, že iba jeden program súčasne, alebo presnejšie len jedno vlákno v čase (jeden závit je základnou súčasťou procesu, alebo program, teda program sa môže skladať z viacerých vlákien, bežať súčasne) je prístup k zdieľanej premenné. Mechanizmus, ktorý nám umožňuje ponúknuť Táto záruka sa nazýva vzájomné vylúčenie.

Vzájomné vylúčenie

Predstavte si, že vytvorenie triedy (alebo súbor dát a metód, ktoré sú užitočné funkcie pre spracovanie dát sám) s názvom Variabile_Condivisa v nasledujúcej štruktúre:






 public class Variabile_Condivisa







 {



   



 euro_dollaro plávať,



   



 euro_sterlina plávať;





   



 Variabile_Condivisa ()



  



 {



     



 euro_dollaro = 1;



     



 euro_sterlina = 1;



  



 }





   



 set_euro_dollaro neplatné (float e_d) = {euro_dollaro e_d;}



   



 set_euro_sterlina neplatné (float e_s) = {euro_sterlina e_s;}





   



 get_euro_dollaro float () {return euro_dollaro;}



   



 get_euro_sterlina float () {return euro_sterlina;}







 }



Dve vyhlásenia, a to euro_dollaro euro_sterlina, čo predstavuje výmenného kurzu eura / dolár a euro / dolár a že si želáme, aby zdieľanie informácií medzi viacerými programami (alebo medzi viac vlákien). Vyvinuté metódy umožňujú priradiť hodnotu týchto údajov (a set_euro_dollaro set_euro_sterlina) a prečítajte si tieto hodnoty (a get_euro_dollaro get_euro_sterlina).

Potom sme sa zistiť zvláštnym spôsobom (Variabile_Condivisa), ktorý sa nazýva konštruktor triedy je vykonaný, a že vytvorenie každej Variabile_Condivisa, v tomto prípade nastavenia hodnoty premenných a euro_dollaro euro_sterlina sú nastavené na hodnotu 1.

Potom sme sa vytvoriť v našom programe typ objektu menoval var Variabile_Condivisa (trieda predstavuje súbor subjektov so spoločnými vlastnosťami, zatiaľ čo objekt predstavuje špecifický prvok tejto množiny, ktoré možno odkazovať v rámci programu ) takto:






 Variabile_Condivisa Variabile_Condivisa var = new ();



Ako môžeme teraz zaručiť, že nie sú žiadne problémy pri správe dát zdieľaných var? Jazyk Java poskytuje kľúčové slovo (alebo slová) synchronizované, ktorý prijíma nejaký objekt ako parameter. Vďaka synchronizáciu, môžete definovať, ako je uvedené v príklade blok kódu:





 synchronizovať (VAR)







 {



  



 / / Synchronizované bloky kódu oddelené (VAR)

  





 }



Pred vykonaním pokynov v synchronizácii bloku, akékoľvek vlákno získa zámok na premennú var, alebo zablokovať všetky ďalšie prístup na rovnakom bloku kódu, kým sa uvoľní, alebo až po spustení celého bloku Príklad kódu oddelené zloženými zátvorkami.

Inými slovami, prvý vlákno (ktoré sme si predstaviť, volať ako prvý), ktorý vykonáva synchronizáciu vyhlásenie (var), v skutočnosti vytvára bariéru, ktorá bráni akejkoľvek inej vlákno synchronizovať vyhlásenie (VAR), kým prvá nebola dokončená vykonávanie synchronizované bloku kódu oddelené. V týchto blokov sú potom vložené inštrukcie pre čítanie alebo zápis zdieľaných dát.

Týmto spôsobom je zaručené vzájomné vylúčenie, ktoré zabezpečia, že len jedno vlákno v čase, môže prístup k zdieľanej premenné. To by malo byť známe, však, že je potrebné starostlivo vyberať objekt odovzdaný ako parameter do synchronizované. To musí byť predmetom spoločné pre všetky závity, v ktorom chcete vytvoriť mechanizmus pre vzájomné vylúčenie, napríklad, ako v tomto prípade, premenné, ktoré chcete čítať alebo upravovať.

Predstavte si, že v tomto bode, ktorú chcete nastaviť náš program tak, aby vlákna, ktoré chcete čítať hodnoty premennej var sa odložiť a hodnotí výsledky až po prvej aktualizácii po ich žiadosti. Predstavte si, že chcete definovať synchronizačný mechanizmus medzi čítania a písania.

V rovnakej kategórii ...
E-Learning
Linux (kurz) Linux (kurz)
Kompletný sprievodca pre open-source systému. Od 49 €.
PHP (kurz) PHP (kurz)
Celý kurz pre vytváranie dynamických webov. Od 49 €.
Ruby a Ruby on Rails (kurz) Ruby a Ruby on Rails (kurz)
Vytvoriť softvér a webových aplikácií s Ruby a ROR. Od 39 €.
Sponzorované odkazy