Mógłby mi ktoś w sposób, że tak powiem "łopatologiczny" wytłumaczyć co dokładnie robi ta klasa ??
ReentrantLock jest alternatywa dla instrinsic lock (sekcji synchronized). Posiada bardziej rozbudowana funckjonalnosc jak np. tryLock(), lockInterruptidly(), conditions, itp. Glowne wady sa takie, ze w przeciwienstwie do intrinsic lock, monitorow nie widac w stack trace. Ponadto nie jest objety optymalizacjami takimi jak biased locking, lock coalescing, lock coarsening czy lock elision.
Dlaczego po prostu nie przeczytasz JavaDoc'a?
Jest czymś na wzór prawa głosu na mównicy sejmowej. Kilka wątków współdzieli ten obiekt i używając metod lock
i unlock
wskazuje innym wątkom, że teraz one "mówią".
Dodatkowo w klasie tej zaszyta jest kolejka chętnych do mówienia. Plus jeszcze trochę metod pozwalających na sprawdzenie długości kolejki oczekujących, tego kto teraz ma blokadę itp.
Ale te wasze wyjaśnienia są zbyt generyczne i pasują do każdego locka właściwie. to co wyróżnia lock o który pyta autor to fakt ze dany wątek może lockować go wielokrotnie i nic się nie stanie. Gdyby wątek zrobił lock 2 razy na zwykłym locku to efektem byłby deadlock.
Shalom napisał(a):
Gdyby wątek zrobił lock 2 razy na zwykłym locku to efektem byłby deadlock.
Co masz na myśli używając określenia "zwykły lock"? Jeśli chodzi ci o intrinsic lock to jesteś w błędzie, bo oba są reentrant.
Generalnie reentrant ogólnie w programowaniu oznacza, że coś może być wywołane zanim skończyło się poprzednie wywołanie.
Po pierwsze, dziękuję Panowie za pomoc w temacie, generalnie ten wątek powinienem faktycznie założyć w dziale "Newbie" gdyż programowania dopiero się uczę. Fakt czytanie z dokumentacji sprawia mi jeszcze niemałe problemy(stąd prosiłem o tłumaczenie "łopatologiczne") dlatego postanowiłem zaczerpnąć wiedzy u bardziej doświadczonych kolegów, a pytanie o tę klasę wzięło się z typowego problemu akademickiego mianowicie problem ucztujących filozofów, którego jednym z rozwiązań jest użycie właśnie tej klasy. Pozdrawiam