标签:
在测试同步的过程中,看到如下代码:
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