Czy używanie zamków (java.util.concurrent.locks.Lock
) zamiast słowa kluczowego synchronized
+ metoda wait()
i metoda notify()
są całkowicie takie same?Jawne zamki kontra Implicit Locks
Czy mogę bezpiecznie programować przy użyciu blokad (jawnych blokad) zamiast ukrytych blokad (synchronized
)?
Jak wiadomo, zawsze stosowałem implicite locks. Jestem świadomy korzyści wynikających z implementacji interfejsu Lock
, takich jak: isLocked()
, getLockQueueLength()
, getHoldCount()
, itp ... jednak nadal oldschool sposób (wait()
i notify()
) miałby inne ograniczenia oprócz tych metod?
Jestem również świadomy możliwości skonstruowania zamka z parametrem (boolean fairness), który pozwala na brak głodu.
Cóż, nie jest * całkowicie * taki sam, jak gdyby były w 100% identyczne, to istnienie jednego byłoby zbędne ;-) –
@Joachim Sauer Z pewnością nie byłby to pierwszy raz, gdy język programowania miałby dwie identyczne sposoby robienia tego samego. – Patashu
@Patashu: na pewno nie. Ale jest mało prawdopodobne, że dodaliby drugą opcję długo po pierwszej, gdyby nie było przynajmniej niektórych zalet (takich jak metoda 'isLocked()', ...). –