sincronizare fir, clase de obiecte și blocare

sincronizare fir, clase de obiecte și blocare

Java suportă mai multe fire pentru a rula. Acest lucru poate duce la faptul că două sau mai multe fire au acces la unul și același câmp sau obiect. Sincronizarea este un proces care vă permite să efectuați toate fluxurile paralele ale programului simultan. Sincronizarea vă permite pentru a evita erorile de memorie cauzate de consistenta din cauza accesului nesecvențial la memoria partajată.
Atunci când o metodă este declarat sincronizat - fir deține monitorul pentru obiectul a cărui metodă este executat. În cazul în care un alt fir se execută o metodă sincronizate, firul va fi blocat până când celelalte versiuni de fire monitor.
Sincronizarea se realizează în Java folosind cuvântul rezervat sincronizat. Puteți să-l utilizați în clasele lor sunt definite metode sau blocuri sincronizate. Nu puteți utiliza variabile în atributele sincronizate sau în definiția clasei.

Blocarea la nivel de obiect

Acest mecanism de sincronizare nu este o metodă statică sau un cod de bloc static, astfel încât doar un singur fir poate executa blocul sau metoda în această clasă de instanță.
Acest lucru ar trebui să fie făcut ori de câte ori este necesar pentru a face datele din firul de nivel instanță.
exemplu:

Blocarea la nivel de clasă

Previne mai multe fire pentru a intra în blocul sincronizat în timpul rulării în oricare din instanțele disponibile. Acest lucru înseamnă că, dacă în timpul executării programului, există 100 de cazuri de DemoClass clasa, doar un singur fir, în acest moment se va efectua demoMethod () în oricare din cazuri, iar toate celelalte cazuri vor fi blocate pentru alte fluxuri.
Acest lucru este necesar atunci când doriți să faceți fir de date statice.

Unele puncte importante

1. Sincronizarea în Java asigură faptul că nu există două fire nu va fi capabil să execute o metodă sincronizate pentru simultan sau simultan.

2. Sincronizatã poate fi utilizat numai cu metodele și blocuri de cod. Aceste metode sau blocurile pot fi statice sau non-statice.

3. atunci când un flux sau intră într-o metodă de sincronizat sau de a bloca aceasta dobândește blocare și ori de câte ori fluxul iese metoda sincronizat sau blocul JVM deblochează. Blocajul este eliberat, chiar dacă firul părăsește metoda sincronizat după finalizarea oricăror erori sau excepții.

4. sincronizate în Java reentrante, acest lucru înseamnă că, în cazul în care metoda sincronizate solicită o altă metodă sincronizate, care necesită aceeași blocare, firul de curent care deține blocare poate introduce această metodă nu este achiziționarea de blocare.

5. Sincronizarea în Java va arunca NullPointerException dacă obiectul este utilizat într-un bloc de nul sincronizat. De exemplu, în exemplul de mai sus codul, în cazul în care blocarea este inițializat la null, sincronizate (blocare) va arunca NullPointerException.

6. Metode sincronizate în Java oferă costuri suplimentare pentru îndeplinirea cererii dumneavoastră. Deci, utilizarea sincronizării atunci când este absolut necesar. De asemenea, luați în considerare utilizarea de blocuri de cod sincronizate pentru sincronizare doar secțiunile critice ale codului.

7. Este posibil ca ambele metode statice și non-statice sincronizate pot lucra simultan sau în paralel, deoarece acestea captura de blocare pe un alt obiect.

8. În conformitate cu specificația de limba pe care nu se poate utiliza sincronizat în constructor va avea ca rezultat o eroare de compilare.

Mult noroc în formare.