码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA-CORE 为什么不synchronized Integer

时间:2015-04-01 12:37:34      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

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

 
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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!