我尝试编写一些关于Lock和synchronized的代码,并比较它们的性能差异.
码:
public abstract class Task {
public abstract int getTotal();
}
// Lock test class
public class TaskWithLock extends Task implements Runnable {
private static int total = 0;
private final Lock lock = new ReentrantLock();
public void run() {
try {
lock.lock();
doSomething();
} finally {
lock.unlock();
}
}
private void doSomething() {
total++;
}
public int getTotal() {
return total;
}
}
// Synchronized test class
public class TaskWithSync extends Task implements Runnable {
private static int …Run Code Online (Sandbox Code Playgroud) 当我用HALF_EVEN模式舍入一个双号时,我发现了一个问题,我不知道它是否是JDK的一个bug?请参阅以下代码:
public static void main(String[] args) {
RoundingMode mode = RoundingMode.HALF_EVEN;
for (int i = 10; i < 100; i++) {
double d = i + 0.55;
int scale = 1;
process(d, scale++, mode);
d = i + 0.555;
process(d, scale++, mode);
d = i + 0.5555;
process(d, scale++, mode);
d = i + 0.55555;
process(d, scale++, mode);
System.out.println("\n");
}
}
private static void process(double d, int scale, RoundingMode roundingMode) {
BigDecimal b = new BigDecimal(d).setScale(scale, roundingMode);
System.out.println(d + " …Run Code Online (Sandbox Code Playgroud)