Ich muss viele formatierte Dezimalwerte in vielen Threads parallel drucken. Um die Dezimalwerte zu formatieren, verwende ich eine java.text.DecimalFormat
konfiguriert durch ein Muster. Ich bin mir der Warnung des Java-doc von DecimalFormat
:DecimalFormat.format (double) in verschiedenen Threads
Dezimalformate sind in der Regel nicht synchronisiert. Es wird empfohlen, separate Format-Instanzen für jeden Thread zu erstellen. Wenn mehrere Threads gleichzeitig auf ein Format zugreifen, muss extern synchronisiert werden.
Aber ich weiß nicht, ob diese Warnung zu meinem Szenario gilt: ich die java.text.DecimalFormat
einmal konfigurieren, wenn die Anwendung gestartet wird (und speichern Sie die Formatter
in einem letzten Feld). Danach benutze ich NUR die format(double)
Methode.
Der Grund, warum ich dies tun möchte, ist: Ich möchte nicht die Leistung verlieren, indem ich jedes Mal eine neue DecimalFormat
Instanz erstelle, wenn ich eine formatierte Zahl drucken muss.
Ich schaute auf den Code DecimalFormat.format(double)
und es scheint Thread sicher zu sein, aber ich bin mir nicht sicher.
Könnten Sie bitte bestätigen, dass die Verwendung von DecimalFormat.format(double)
schließlich threadsicher ist, wenn Sie nicht die Konfiguration des Formatierungsprogramms ändern oder erklären, warum dies nicht der Fall ist?
A "workarround" ist Thread zu verwenden, aber ist nicht die Frage. – Ralph
Eine andere Problemumgehung besteht darin, das DecimalFormat-Objekt für Konvertierungen zu synchronisieren. Entweder (a) Sie wenige Konvertierungen und Synchronisierung hat keinen Einfluss auf die Leistung, oder (b) Sie viele Konvertierungen, in diesem Fall können DecimalFormat Objekte wahrscheinlich für Konvertierungen im selben Thread wiederverwendet werden, daher sollten ihre Baukosten vernachlässigbar sein. –