compareTo()
クラスのメソッドを使用してBigDecimal
、(大きな) 実数を文字列として読み取り、その型 (基本的には「大きすぎる」、double または float) に従って分類するJava アプリケーションがあります。アプリケーションは 1 秒間に非常に多くの文字列を読み取るため、パフォーマンスの最適化が不可欠です。
以下は、コードの省略された抜粋です。
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点質問
- マルチスレッド環境で、上記の比較を行っても安全ですか (静的フィールドが与えられた場合)?
- 上記の分類を実装するスレッドセーフで高速な方法はありますか?