Ich habe eine Util-Klasse, die ich für die Berechnung der Statistik verwende. Ein exponentieller gleitender Durchschnitt wird unter mehreren Threads berechnet. Auch diese Threads passieren unterschiedliche Werte, manche mal doppelt und andere lang. Ich möchte Generika machen und auch sicher sein, dass bei der Anwendung synchronisiert auf die Signatur der Methode.Gewindesicherheit und Generika in einer statischen Klasse
public class StatUtils {
public static class WMA {
// MMA
}
public static class EMA {
/** The alpha. */
private static double staticAlpha = 0.9;
/** The old value. */
private static double staticOldValue = 1.0;
/**
* Compute.
*
* @param pValue the value
* @return the double
*/
public static synchronized double compute(double pValue) {
if (staticOldValue == 0.0) {
staticOldValue = pValue;
return pValue;
}
double lValue = staticOldValue + staticAlpha * (pValue - staticOldValue);
staticOldValue = lValue;
return lValue;
}
}
}
Ist das Rechenverfahren Thread-sicher? Wenn ja, ist es möglich, diese statische Klasse generisch zu machen?
Problem mit Ihrer Klasse Design zu sein scheint . Warum willst du 'static' class member' staticAlpha' vom Konstruktor instanziieren? Ich bin mir nicht sicher über die genaue Anforderung, aber wenn ich auf deinen Code schaue, denke ich, dass du nicht einmal Synchronisation benötigst, wenn er richtig entworfen ist. –
Beachten Sie, dass das ein Fehler war, dass ich Klasse natürlich nicht instanziieren –
Welcher Teil sollte generisch werden? Wenn Sie einen generischen Typ anstelle von Doubles verwenden möchten, was sollte "compute" tun? –