Je sais que SimpleDateFormat et NumberFormat ne sont pas un fil de sécurité.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4101500 p>
Mais qu'en est-il des autres classes de format comme MessageFormat? P>
fortify 360 marque l'utilisation de "MessageFormat.Format (String, Object ...)" Méthode statique en tant que "Etat de la race - Format de format", mais lorsque j'analyse le code source de MessageFormat, j'ai vu que Dans cette méthode, il crée une nouvelle instance locale de MessageFormat lui-même. P>
Le fil de la classe Java MessageFormat est-il sécurisé? P>
3 Réponses :
Merci d'avoir montré le Javadoc, ce serait suffisant pour moi. Quand j'ai consulté le code source de MessageFormat, il est encore plus clair pour moi pourquoi ce n'est pas le fil sûr. Cette classe utilise NumberFormat et DateFormat, deux classes qui ne sont pas en sécurité.
Ce n'est pas! Vérifiez cette documentation sur laquelle il parle de "synchronisation" docs.oracle.com/fr/java/javase/11/docs/java/java.base/java/te xt / ... suivant est à partir de ce lien: "Les formats de message ne sont pas synchronisé. Il est recommandé de créer des instances de format distinctes pour chaque thread. Si plusieurs threads accèdent un format simultanément, il doit être synchronisé à l'extérieur. "
Si vous vous référez à la méthode
public static String format(String pattern, Object... arguments)
par javadoc, MessageFormat
Les objets ne sont pas du thread-coffre-fort. Vous pouvez utiliser un ThreadLocal code>
pour créer un objet séparé pour chaque fil qui en a besoin d'un.
ThreadLocal<MessageFormat> threadLocalMessageFormat = new ThreadLocal<MessageFormat>() { @Override protected MessageFormat initialValue() { return new MessageFormat(pattern); } };