Was ist teurer in Java 1.7 - java.util.concurrent.locks.ReentrantLock oder ein synchronisierter Block?

8

Besonderheiten von Lock beiseite, welches ist, wenn es teurer ist? Ich konnte diesbezüglich keine Benchmarks finden.

Für Situationen, in denen spezielle Funktionen nicht benötigt werden, hat Lock Vorteile?

Danke.

    
marathon 05.03.2012, 22:57
quelle

3 Antworten

3

Ein Kollege hat heute Nachmittag einen cleveren Test geschrieben und festgestellt, dass ReentrantLock mehr als doppelt so schnell wie synchron ist (über 500 Threads mit 60.000 Iterationen), langsamer degradiert und weniger GC-Auswirkungen hat.

In beiden 1.6 und 1.7 jvms. (In 1.5, synchronisiert durchgeführt viel schlechter)

Es scheint so, als ob die Synchronisation für Bereiche mit geringer Konkurrenz gut ist, aber Lock bläst seine Türen für eine höhere Konkurrenz aus.

    
marathon 06.03.2012, 01:50
quelle
4

Laut Oracle / David Dices Weblog J2SE 6, 2006 (das ich gerade durch ein paar Googles gefunden habe), Es gibt keinen großen Unterschied. Vielleicht haben sich die Dinge seitdem geändert, aber ich bezweifle es.

Siehe auch diesen Vergleich von Lock und ReentrantLock , der einige Benchmarks enthält (und Quellcode des Benchmarks, möglicherweise möchten Sie es auf einem synchronized -Block ausführen) und behebt einige Unterschiede zwischen fairen Sperren und unfairen Sperren.

Eine Antwort auf diese Frage: Mixing synchronized () mit ReentrantLock.lock () Links zu einem Benchmark zwischen verschiedenen Sperren bei der Verwendung von Copy-on-write-Sammlungen.

Wie auch immer, der wichtigste Einfluss auf die Leistung ist Ihre Sperrstrategie, d. h. indem Sie sicherstellen, dass Ressourcen so kurz wie möglich gehalten werden, wenn sie den Flaschenhals Ihrer Anwendung bilden.

    
The Nail 05.03.2012 23:02
quelle
3

Lock hat den Vorteil, dass Sie die Sperre nicht auf die gleiche Weise freigeben müssen, wo Sie sie erhalten; Sie können Dinge wie tryLock() und verschiedene andere nützliche Funktionen tun, die die grundlegende Synchronisation nicht hat.

    
Louis Wasserman 05.03.2012 23:10
quelle

Tags und Links