Quelles sont les garanties de sécurité de thread pour ImmutableList.Builder de Guava? Les javadocs ne disent pas.Est-ce que le thread ImmutableList.Builder de Guava est sûr?
Répondre
Alors que les classes Gava Immutable sont threadsafe, leurs constructeurs ne le sont pas. Pour la plupart des applications, un seul thread interagira avec une instance Builder particulière.
Bien que l'absence de sécurité de thread n'a généralement pas besoin d'être documentée, un tel Javadoc peut être utile aux générateurs de collection Immutable. Les gens peuvent être surpris que ImmutableList soit threadsafe alors que ImmutableList.Builder ne l'est pas.
Si la sécurité des threads n'est pas mentionnée dans les javadocs, ne l'assumez pas!
Plus sérieusement, "non".
Je préférerais aussi javadocs de ImmutableList et les amis incluent une telle remarque plus évidente, oui- (donc vous ne devriez pas l'assumer vous-même), parce que le "évident" n'est pas toujours le cas. Juste l'autre jour, je discutais de scala.List
, une liste immuable, et quelques problèmes surprenants qu'elle pourrait causer si échangés entre threads de façon inappropriée (via une course de données), que les gens ne pensaient pas parce qu'ils voient le mot "immuable" sur la boîte , plus ils assimilent "immutable == thread-safe", de sorte qu'il est payant d'être prudent, même en documentant des aspects "évidents" de la sécurité des threads.
D'accord avec @Dimitris Andreou: ne présumez certainement pas la sécurité du fil si elle n'est pas documentée en tant que telle. Lorsque vous allez à l'effort de faire un threadsafe classe non-trivial, vous voulez les utilisateurs de le connaître. Au-delà de cela, je pense que le cas d'utilisation le plus courant pour un constructeur sera confiné au thread: c'est-à-dire en tant que variable locale dans une méthode. Si vous avez besoin de plusieurs threads pour créer une liste, est-il encore immuable?
Si vous avez plusieurs threads alimentant une liste, mais que vous voulez l'instantané et dire "plus de changements à venir, c'est immuable" alors j'écrirais quelque chose qui prendrait les éléments de ces threads et gèlerait le contenu dans une nouvelle ImmutableList quand vous savez qu'il est prêt.
- 1. guava-libraries - Le thread de classe Ordering est-il sécurisé?
- 2. Est-ce que le thread SoapHttpClientProtocol est sûr?
- 3. Est-ce que le thread IronRuby ScriptSource.Execute est sûr?
- 4. Est-ce que thread-local signifie thread sûr?
- 5. apr_pool_destroy() de thread Apache est-il sûr?
- 6. Le thread d'opérations de base de données est-il sûr?
- 7. Est-ce que ce fil est sûr?
- 8. Convertisseur JSF personnalisé pour Date - Est-ce que le thread est sûr?
- 9. Incorporation de thread sûr Python
- 10. Le thread SQLite est-il sûr dans cette situation?
- 11. wcf reste weboperationcontext.current thread sûr?
- 12. sérialisation d'objet java - thread sûr?
- 13. Est-ce que le statique est sûr dans Android?
- 14. Django - rendre le thread d'E/S de fichier sûr
- 15. Est-ce que TcpClient BeginRead/Send est sûr?
- 16. Est-ce que quelqu'un a écrit un BindingList thread-sûr <T>?
- 17. Est-ce que taskkill est sûr de fermer un processus?
- 18. Est-ce que ce fil de code ruby est sûr?
- 19. Le thread de l'algorithme union/find normal est-il sûr sans travail supplémentaire?
- 20. Recommandations pour tester le code multithread ou s'assurer que le code est sûr pour les threads
- 21. sont des propriétés de classe ou des variables thread sûr
- 22. Comment rendre mon thread de structure de données sûr?
- 23. Comment fonctionnent les versions de Guava?
- 24. Class pour mantain un cache de thread sûr
- 25. Le filetage Joiner est-il sûr?
- 26. Est-ce que ce fil est sûr? (données partagées sans mutex/sémaphore)
- 27. PHP est-il sûr pour les threads?
- 28. Le fil ucLibc malloc est-il sûr?
- 29. Est-ce que [UIWebView loadRequest] bloque le thread?
- 30. Est-ce que + (void) initialize verrouille le thread?
Avez-vous une preuve? L'article "Immutable Collections" (https://github.com/google/guava/wiki/ImmutableCollectionsExplained) dit "Les objets immuables peuvent être utilisés par de nombreux threads" mais il ne dit pas explicitement "La collection Immuable de Guava est thread-safe" . Je ne suis toujours pas convaincu :-( – 30thh