gpt4 book ai didi

java - 静态类中的线程安全和泛型

转载 作者:行者123 更新时间:2023-12-02 03:30:14 24 4
gpt4 key购买 nike

我有一个用于统计计算的 Util 类。指数移动平均值是在多个线程之间计算的。此外,该线程传递的不同值有时是双倍的,有时是长的。我想要制作泛型,并确保在将 synchronized 应用于方法的签名时。

    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;
}
}
}

计算方法线程安全吗?如果是,是否可以使这个静态类通用?

最佳答案

只要同步,你的方法就是线程安全的,但你不能让泛型成为静态类。泛型类型在类实例化时解析,但静态类永远不会发生这种情况。

您可以定义一个通用方法,例如:

public static synchronized <T extends Number> compute(T pValue)

但是在您的情况下,您可以简单地使用 double,因为 long 值可以毫无问题地转换为 double。

关于java - 静态类中的线程安全和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com