标签:
在测试同步的过程中,看到如下代码:
public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}
看代码的时候没有疑问,但实际写的时候,有个疑问,为什么要创建lock对象.
直接lock(c1)不可以吗?
通过搜索,其中有一个解释为:
由于Integer为Object,所以在执行++操作的时候,会涉及转型。影响效率。
那不使用++不就不影响效率了吗?
接着看了另外一种解释:
Integer old = syncObj;
syncObj ++;
System.out.println(syncObj == old);
当++后,打印结果为false,对象已经发生改变,所以,sync这个对象是锁不住的
JAVA-CORE 为什么不synchronized Integer
标签:
原文地址:http://www.cnblogs.com/simonsun/p/4383243.html