Kann mir jemand in diesem Szenario helfen: Es gibt mehrere Threads lesen & nur ein Thread eine HashMap aktualisieren, sollte ich ConcurrentHashMap und setzen concurrencyLevel als 1 verwenden (da Standardwert von concurrencyLevel 16), oder einfach HashMap verwenden, ohne direkt synchronisiert zu werden?Concurrency Ebene in ConcurrentHashMap in Java
Antwort
Wenn Sie die Frage nach der Gleichzeitigkeit ignorieren, gilt als allgemeine Faustregel, dass Sie eine Form der Synchronisation benötigen, wenn Sie den veränderlichen Status (& Schreiben aus mehreren Threads) sicher teilen möchten.
Java gibt Ihnen eine Menge Möglichkeiten, um dies zu erreichen:
- Das
synchronized
Stichwort - Einer der THREAD Sammlungen, wie
ConcurrentHashMap
- Die verschiedenen
Lock
Implementierungen - Einer der synchronisierten Sammlung wrappers (zB
Collections.synchronizedMap()
) - obwohl ich nicht an eine Situation denken kann, wo Sie eigentlich verwenden möchten diese.
Von dem, was wir wissen von Ihrem Anwendungsfall (was nicht viel ist), ist die beste "out-of-the-box" Option wäre ConcurrentHashMap
zu verwenden. Es ist nicht erforderlich, dass Sie manuell synchronisieren und wenn Sie es richtig verwenden, kann es Ihren Code threadsafe machen.
Auf der Grundlage der Dokumentation es scheint, dass Sie das concurrencyLevel
Argument 1
einstellen möchte, aber das sind Dinge, die Sie können und sollte Test. Abhängig davon, wie viel Konkurrenz Sie tatsächlich haben, spielt es vielleicht keine große Rolle.
- 1. Concurrency-Problem bei der Verwendung von ConcurrentHashMap
- 2. Java ConcurrentHashMap Aktionen Atomizität
- 3. Wie ConcurrenthashMap verwaltet, wenn Concurrency-Ebene HÖHER als die Anzahl der Buckets ist?
- 4. Java Concurrency: flag/event
- 5. JAVA - Concurrency und Schlösser
- 6. Java Concurrency Code Verbesserung Ideen
- 7. Concurrent Modifikation in ConcurrentHashMap
- 8. concurrencyLevel in ConcurrentHashMap
- 9. konfrontiert Java Multithread Concurrency Problem
- 10. Java Concurrency: CAS vs Sperren
- 11. AWS Lambda und Java Concurrency
- 12. Implementieren eines Cache mit einem Java-ConcurrentHashMap
- 13. Java Entfernen eines bestimmten Elements von ConcurrentHashMap
- 14. Java ConcurrentHashMap atomic erhalten, wenn vorhanden
- 15. Java Concurrency in der Praxis: Race-Bedingung in BoundedExecutor?
- 16. Java ConcurrentHashMap nicht thread sicher .. wth?
- 17. .get() in ConcurrentHashMap ist threadsicher?
- 18. Java Concurrency - Singleton Design mit einem Monitor-Thread
- 19. Concurrency in RabbitMQ
- 20. Concurrency in bean Validierung
- 21. Concurrency Management in WCF
- 22. Concurrency-Primitive in Racket
- 23. ConcurrentHashMap setzen
- 24. ConcurrentHashMap Sperren
- 25. Deduplizierung für String intern Methode in ConcurrentHashMap
- 26. Filter ConcurrentHashMap nach Wert
- 27. Unterschied zwischen Java Concurrency, Akka und RxJava?
- 28. Hibernate Concurrency-Problem in der Java-SE-Anwendung
- 29. Wie veraltete Daten in Java-Concurrency zu behandeln?
- 30. synchronisierte Block/Methode und Zeitplan Regeln in Java Concurrency