2011-07-09 16 views
10

Kiedy powinniśmy używać ReentrantReadWriteLock w porównaniu do zsynchronizowany słów kluczowych w środowisku wielowątkowym w Javie?ReentrantReadWriteLock vs zsynchronizowane

Jakie są zalety korzystania z ReentrantReadWriteLock nad zsynchronizowane w Java?

Czy można podać przykład (w języku Java)?

Dzięki!

+1

Możesz przeczytać ten wątek, a następnie sprawdzić, czy istnieje lepszy sposób na sformułowanie pytania, ponieważ to, co jest lepsze, zależy od tego, co robisz, od tego, jak twój kod uzyskuje dostęp do obiektów/zmiennych. http://forum.ragezone.com/f683/synchronised-vs-reentrantlocks-696540/ –

Odpowiedz

18

Synchronizacja pozwala w jednym wątku na raz.

Blokady odczytu/zapisu pozwalają na wiele czytników w tym samym czasie, ale tylko wtedy, gdy nie ma już pisarzy. Dlatego w niektórych scenariuszach użytkowania możemy uzyskać lepszą współbieżność, ponieważ populacje czytelników mogą działać wspólnie.

Java API documentation podaje przykład klas kolekcji, które powinny zawierać więcej czytników niż pisarzy.

11

The locking article by Brian szczegółowo wyjaśnia zalety i wady każdego podejścia.

Blokada ramy jest kompatybilny zamiennikiem dla synchronizacji, która oferuje wiele funkcji, nie przewidzianych przez zsynchronizowane, jak również implementacje oferujących lepsze wydajność w rywalizacji. Jednak istnienie tych oczywistych korzyści nie jest wystarczająco dobrym powodem, aby synchronizować z ReentrantLock do . Zamiast tego podejmij decyzję na podstawie tego, czy potrzebujesz mocy ReentrantLock. W zdecydowana większość przypadków, będziesz nie - synchronizacja działa tylko dobrze, działa na wszystkich JVM, jest rozumiane przez szerszy zakres programistów, i jest mniej podatne na błędy. Save Lock for when naprawdę tego potrzebujesz. W takich przypadkach, będziesz zadowolony, że go masz.

Powiązane problemy