BigDecimal compareTo()线程安全

PNS*_*PNS 1 java thread-safety bigdecimal compareto

我有一个Java应用程序,它使用类的compareTo()方法BigDecimal来根据类型(基本上,"太大",双重或浮动)对(大)实数进行分类,读取为字符串.应用程序每秒读取大量此类字符串,因此任何性能优化都是必不可少的.

以下是代码的缩写摘录:

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)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

那么,2个问题

  1. 在多线程环境中,进行上述比较(给定静态字段)是否安全?
  2. 是否有任何线程安全和更快的方式来实现上述分类?

use*_*421 5

由于BigDecimal是不可变的,因此它也是线程安全的.

您还应该使用BigDecimal.valueOf()而不是new BigDecimal()全部来利用可能的任何缓存.