JAVA-CORE 为什么不synchronized Integer

在测试同步的过程中,看到如下代码:

 
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这个对象是锁不住的
posted @ 2015-04-01 10:48  country3721  阅读(181)  评论(0)    收藏  举报