Vektor-vs-Sammlungen.synchronizedList(ArrayList)
Vector ist synchronized, ArrayList nicht synchronisiert, aber können wir synchronisieren eine ArrayList von Collections.synchronizedList(aList)
, so wird das besser und schneller?
- Wenn das ist C#, Kennzeichnen Sie bitte Ihre Frage mit "C#" oder ".NET".
- Warum schreibst du nicht einen test und finden Sie heraus?
- Können Sie erklären, das Nutzungsverhalten? 1) Viele schreibt/liest viele 2 Wenige) schreibt, viele liest, 3) Viele schreibt, paar liest 4) paar/paar, muss nicht die Optimierung
- Siehe auch stackoverflow.com/questions/1386275/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Synchronisiert Sammlungen sind eine Verschwendung von Zeit und gefährlich. Ein triviales Beispiel, warum Sie schlecht sind, ist zu prüfen, zwei threads laufen eine Schleife in der gleichen Zeit auf der gleichen Sammlung:
Unserer Liste konnte synchronisiert werden (z.B. ein Vektor), und der code würde immer noch brechen schrecklich. Warum? Da die einzelnen Aufrufe von size(), get(), remove(), werden synchronisiert, aber ein thread könnte immer noch das entfernen von Elementen aus der Liste, während die anderen Durchlaufen ihn. In anderen Worten, wir haben eine race-Bedingung und die Verwendung von synchronized collections hat uns nichts.
Fix das Rennen haben wir synchronisieren den gesamten Betrieb auf die Sammlung oder Verwendung von Java 5 concurrency Sperren, das gleiche zu tun.
Dieser code-block ist jetzt thread-sicher, da kann nur ein thread ausgeführt, die Schleife zu einem Zeitpunkt. Und nun gibt es keinen Grund für die Verwendung einer synchronisierten collection. Wir können eine ArrayList statt eines Vektors und sparen uns die Leistungseinbußen auf alle diejenigen, die synchronisiert Anrufe.
Also nicht verwenden, synchronisiert Sammlungen. Wenn Sie sich mit mehreren threads zu schlagen, die gleiche Liste dann werden Sie brauchen, um die Operationen auf der Liste, nicht die einzelnen Anrufe.