我应该使用MathContext.DECIMAL32还是MathContext.DECIMAL64?我已经看过文档了,但是我不能真正理解什么时候使用。
我用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);
...我使用oraclejava1.8,ubuntu14.04,英特尔核心i7 (64位)
发布于 2016-08-31 11:44:59
根据您的系统架构,如果您不在x64芯片组,那么任何64位类型操作的指令集将被分割成两个CPU。与您的英特尔核心i7 (x64)有关的任何问题都会被否定。
更新日期:2016年09月1日
根据JVM规范,对任何64位值分配都需要两个32位赋值。
public class IdGenerator {
private long id;
public IdGenerator() {
id = 0;
}
public int getNextId() {
++value;
}
}基于这个假设,上面对getNextId的调用不是原子的。如果在多线程上下文中使用这个类,则结果getNextId()可能不完全准确,例如,这些调用可能产生以下ids :0、1、3、5、6、7、8、10。在x86平台上,您不会得到32位类型的这种行为。
更新5/9/2016
希望下面的链接对我的回答有所帮助
http://preshing.com/20130618/atomic-vs-non-atomic-operations/
https://stackoverflow.com/questions/39246445
复制相似问题