私はStats計算に使用するUtilクラスを持っています。指数移動平均は複数のスレッド間で計算されます。また、このスレッドはdifferents値を倍にし、もう一方をlongに渡します。私はジェネリック医薬品を作りたいと思っており、をに同期させてメソッドのシグネチャに適用していることを確認してください。スレッドセーフと静的クラスのジェネリック
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;
}
}
}
computeメソッドのスレッドは安全ですか?この静的なクラスを一般的にすることが可能な場合は?
問題は、あなたのクラスの設計であると思われます。なぜ静的なクラスメンバ 'staticAlpha'をコンストラクタからインスタンス化したいのですか?私は正確な要件についてはわかりませんが、あなたのコードを見れば、適切に設計されていれば、同期が必要ないと思います。 –
私はクラスをインスタンス化しないエラーだったことに注意してください。 –
どの部分が一般的になるべきですか? double型ではなくジェネリック型を使用する場合、 '計算'するべきことは何ですか? –