Peut-il y avoir des problèmes à avoir une classe statique avec seulement des méthodes statiques (pas de propriétés, champs ou autre) et avoir plusieurs threads accédant à ces méthodes en même temps?Méthodes statiques et multi-threads
Répondre
Oui, il peut y avoir. Cela dépend de la façon dont vos méthodes sont écrites. Maintenant, s'il n'y a que des méthodes statiques, cela signifierait théoriquement un code entièrement réentrant sans problèmes.
Tant qu'il n'y a pas d'état partagé ou de ressources externes, alors: aucun risque. Vous avez mentionné "no fields" etc, ce qui est bon - tant qu'ils ne sont pas indirectement parler d'état partagé (peut-être via un argument commun qui n'est pas thread-safe dans ce scénario, ou par l'intermédiaire de certains autres méthodes d'utilitaire qu'il appelle, qui partagent l'état de manière désordonnée), vous devriez aller bien.
Potentiellement, oui.
Imaginer:
class Logger
{
WriteToLogs(string msg)
{
// Write data to file1
...
// Write data to file2
...
}
}
Maintenant, imaginez que vous avez plusieurs threads essayant d'appeler WriteToLog() en même temps. Que se passe-t-il lorsque thread2 est programmé avant que thread1 ait fini d'écrire dans les fichiers journaux? Vous pourriez vous retrouver avec toutes sortes de corruption de données dans ce cas.
Les classes et méthodes statiques n'offrent AUCUNE forme de synchronisation de thread, de verrouillage, etc., ce qui vous permet de concevoir et de mettre en œuvre.
Oui, par exemple, les implémentations singleton peuvent être statiques mais elles doivent implémenter des mécanismes tels que double checked locking pour éviter les problèmes de multithreading.
- 1. champs statiques et méthodes
- 2. Méthodes et variables statiques
- 3. Méthodes statiques et méthodes d'instance en mémoire
- 4. méthodes statiques/champs et WCF
- 5. type hinting et méthodes statiques
- 6. MVVM ViewModel et méthodes statiques
- 7. méthodes statiques et tests unitaires
- 8. Blocs synchronisés pour les méthodes statiques et non statiques
- 9. méthodes statiques synchronisées
- 10. Méthodes statiques dans ASP.NET
- 11. python variables statiques et les méthodes
- 12. Méthodes statiques et sécurité des threads
- 13. différence entre l'objet et les méthodes statiques
- 14. C# Les méthodes statiques et console
- 15. Eclipse Xtend et les méthodes statiques
- 16. Vars Clojure et méthodes statiques Java
- 17. Méthodes et héritage statiques dans Coffeescript
- 18. Génériques Java, singletons et méthodes statiques
- 19. classe utilitaire méthodes statiques et l'héritage
- 20. classe abstraite et les méthodes statiques
- 21. Méthodes statiques avec Spring MVC et tomcat
- 22. Extension, constructeur super et méthodes statiques
- 23. hériter des méthodes statiques et des champs
- 24. Architecture en couches et méthodes statiques
- 25. Méthodes statiques comme wrapper
- 26. Méthodes statiques en C#?
- 27. Appel de méthodes statiques
- 28. Méthodes statiques nécessitant var
- 29. F # Méthodes statiques multilignes
- 30. java syncrhonized méthodes statiques