Jedno pytanie pojawiło się w moim umyśle podczas rozważania implementacji klasy ReentrantLock. ReentrantLock można przekształcić do postaci szeregowej, aw dokumentacji mówi się, że każda zserializowana blokada jest zawsze odblokowywana niezależnie od stanu, w którym była serializowana. Ma to sens, ponieważ stan Zablokuj i odblokuj jest zasadniczo oparty na wątkach w środowisku wykonawczym (którzy posiadają blokadę) i podczas dekompilacji te wątki mogą być niedostępne.Dlaczego blokady są Serializable w java?
Pytanie brzmi: Dlaczego potrzebujemy blokady, aby przetrwać, ponieważ nie przechowuje jej podstawowego stanu (zablokowany/odblokowany)? W tej chwili mogę założyć, że może to być właściwość fair zamka. Ale uczciwość jest znowu zależna od systemu operacyjnego, więc jeśli utrzymamy blokadę na jednej platformie i zserializujemy na innej, ponieważ (napisz raz i uciekaj gdziekolwiek) to może nie działać, więc nie ma sensu utrzymywać się tylko dla uczciwości.
Mam nadzieję, że wyraźnie wprowadziłem zamieszanie związane z serializacją zabezpieczeń w Javie.
W takim przypadku Blokada może zostać zadeklarowana jako przemijająca, a po usunięciu serailizacji należy ponownie zablokować sekcję krytyczną. – Gourabp
@Gourabp to dobry punkt. Wciąż możesz to zrobić, nie? Myślę, że zrobili to w ten sposób, aby być "bezpiecznymi" z serializacją. Ale poza tym, myślę, że nie jestem zbyt pewny, dlaczego tak by się stało. –