我有一个 Java 应用程序,它使用 BigDecimal
类的 compareTo()
方法来分类一个(大)实数,读取为一个字符串,根据到它的类型(基本上,“太大”,double 或 float)。应用程序每秒读取大量此类字符串,因此任何性能优化都是必不可少的。
以下是代码的简短摘录:
static final BigDecimal MAX_LONG = new BigDecimal(Long.MAX_VALUE);
static final BigDecimal MAX_FLOAT = new BigDecimal(Float.MAX_VALUE);
static final BigDecimal MAX_DOUBLE = new BigDecimal(Double.MAX_VALUE);
String value = readValue(); // Read the number as a string
BigDecimal number = new BigDecimal(value);
if (number.compareTo(MAX_DOUBLE) > 0)
{
...
}
else if (number.compareTo(MAX_FLOAT) > 0)
{
...
}
else if (number.compareTo(MAX_LONG) > 0)
{
...
}
那么,2 个问题
- 在多线程环境中,进行上述比较是否安全(给定静态字段)?
- 是否有任何线程安全且更快的方法来实现上述分类?
最佳答案
由于 BigDecimal 是不可变的,因此它也是线程安全的。
您还应该自始至终使用 BigDecimal.valueOf()
而不是 new BigDecimal()
,以利用任何可能的缓存。
关于java - BigDecimal compareTo() 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130783/