DateFormats ne sont pas thread-safe, ce qui signifie qu'ils maintiennent une représentation interne de l'etat. Leur utilisation dans un contexte statique peut donner quelques jolis bugs étranges si plusieurs threads accèdent à la même instance simultanément.
Ma suggestion serait de faire vos variables locales à l'endroit où vous êtes en utilisant, au lieu d'en faire des propriétés statiques de la classe. Il semble que vous pourriez faire quand vous êtes à l'initialisation de la classe, de sorte que vous pouvez le faire dans le constructeur:
public class MyClass {
private String fileName;
public MyClass() {
final Date today = Calendar.getInstance().getTime();
final DateFormat yymmdd = new SimpleDateFormat("yyMMdd");
this.fileName = "file_" + yymmdd.format(TODAY);
}
...
}
Et si vous avez besoin d'utiliser le formateur dans plusieurs endroits, vous pourriez juste faire le patron static final
et de créer un nouveau local DateFormat
en cas de besoin:
public class MyClass {
private static final String FILENAME_DATE_PATTERN = "yyMMdd";
public void myMethod() {
final DateFormat format = new SimpleDateFormat(FILENAME_DATE_PATTERN);
// do some formatting
}
}
Le FindBugs de la documentation pour la question dit:
Comme la JavaDoc unis, DateFormats sont
intrinsèquement dangereuses pour multithread
utiliser. Le détecteur a trouvé un appel à
une instance de DateFormat qui a
été obtenu par l'intermédiaire d'un champ statique. Cette
regarde suspectes.
Pour plus d'informations, voir le Soleil
Bug #6231579 et le Soleil Bug #6178997.
Et la javadoc pour DateFormat suggère:
Les formats de Date ne sont pas synchronisés. Il
est recommandé de créer des
format instances pour chaque thread. Si
plusieurs threads accèdent à un format
en même temps, elle doit être synchronisée
à l'externe.
Jack Leow réponse a également un bon point sur la sémantique de votre statique utilisation de "aujourd'HUI".
En aparté, j'en ai déjà vu cela se produire dans un environnement de production, et c'est très confus chose à déboguer à la première; ainsi, dans mon expérience, la FindBugs avertissement est en fait une suggestion utile (contrairement à certains autres l'analyse statique des règles, qui semblent parfois être tâtillon).