Declarație sincronizate în Java, blog despre criptare

Sincronizarea obiect nu poate utiliza numai metodele corespunzătoare cu
modificator yuschim, dar, de asemenea, prin intermediul blocului de cod sincronizat. În acest scenariu, blocarea obiect este indicată în declarația sincronizate,
și devine indisponibil pentru alte metode și blocuri sincronizate. Metodele convenționale pentru a sincroniza nu acorde atenție, astfel încât responsabilitatea pentru obiectul de blocare competentă cade pe programator.

Ca urmare a compilarea și rularea este probabil (deoarece al doilea flux și poate bloca primul obiect), de ieșire:

Unul dintre fluxurile de blocare obiect, și atâta timp cât acesta a terminat bloc de sincronizare de execuție, în care modificarea valorii se face obiectul, nici un alt fir nu poate provoca bloc sincronizate pentru acest obiect.

Dacă eliminați codul de sincronizare a obiectului s. apoi de ieșire va fi diferit, pentru că un alt fir poate accesa obiectul si schimba-l înainte de prima a terminat ciclul.

Următorul exemplu arată așteptați interacțiune () și
notifica () când eliberarea și revenirea blocajului în blocul sincronizat. Aceste metode sunt folosite pentru controlul fluxului într-o situație în care este necesar să se specifice o secvență de acțiuni fără fire re-start.

așteptați metoda (). cauzate în interiorul blocului sau a unei metode sincronizate oprește executarea firului curent și eliberează obiect entrapped blocarea, în special de blocare obiect. fluxul de retur poate bloca obiect prin apelarea notificare () pentru un anumit flux sau
notifyAll () pentru toate fluxurile. Apelul poate fi făcută numai de la un alt fir blocat, la rândul său, a spus obiect.

public class Blocat