我应该使用MathContext.DECIMAL32
还是MathContext.DECIMAL64
?我查看了documentation,但我真的不明白何时使用它们。
我使用BigDecimal来表示我想要应用到一定金额的百分比。像这样:
...
final MathContext mc = MathContext.DECIMAL32;
BigDecimal amount = getAmount(args);
float percent = getPercent().floatValue();
BigDecimal percentAsBd = new BigDecimal(percent/100.f, mc).setScale(4, RoundingMode.HALF_UP);
BigDecimal threshold = amount.multiply(percentAsBd);
...
我使用的是oracle java 1.8,ubuntu 14.04,Intel core i7(64bit)
答案 0 :(得分:0)
根据您的系统架构,如果您不在x64芯片组上,则任何64位类型操作的指令集将分为两个CPU。使用英特尔酷睿i7(x64)时,任何与此相关的问题都将被否定。
更新时间:01/09/2016
根据JVM规范,分配给任何64位值赋值需要两次32位分配。
public class IdGenerator {
private long id;
public IdGenerator() {
id = 0;
}
public int getNextId() {
++value;
}
}
基于该假设,上面对getNextId的调用不是原子的。如果在多线程上下文中使用此类,则结果getNextId()可能不完全准确,例如这些调用可能会产生以下ID 0,1,3,5,6,7,8,10。您不会在x86平台上使用32位类型获得此行为。
2016年5月9日更新
希望以下链接有助于我的回答
http://preshing.com/20130618/atomic-vs-non-atomic-operations/