2010-03-30 5 views
1

Je voudrais lire certains paramètres lors de l'initialisation de servlet (dans la méthode init()), et les stocker parmi les attributs de contexte de servlet (en utilisant getServletContext(). SetAttribute()). Je voudrais lire ces paramètres plus tard - pendant un traitement de requête (en utilisant getServletContext(). GetAttribute()). Ainsi, les multiples threads pourraient le faire simultanément. Ma question est si une telle tentative est sûre? Puis-je être sûr que les appels multi-threads à getAttribute() ne gâchent aucun état interne du contexte de servlet?La méthode getAttribute() de l'implémentation Tomcat ServletContext peut-elle être appelée sans synchronisation?

Veuillez prendre en compte que je ne vais pas appeler le setAttribute() n'importe où en dehors de l'initialisation. Ainsi, seuls les appels à getAttribute() vont être effectués à partir de plusieurs threads. Mais en fonction de la mise en œuvre interne, cela pourrait aussi être dangereux. Ainsi, toute information sur la mise en œuvre de Tomcat serait appréciée.

Répondre

6

L'implémentation principale de ServletContext dans Tomcat est la classe ApplicationContext. Si vous regardez la ressource liée, vous verrez que les attributs sont stockés dans une instance java.util.concurrent.ConcurrentHashMap. Ainsi, pour ApplicationContext au moins les méthodes getAttribute() et setAttribute() sont thread-safe.

Questions connexes