当前位置:编程学习 > JAVA >>

synchronized一个long

RT,在程序中,我想对一个long的整型进行锁机制,但是报错说long不能用于synchronized。但是用它的autoboxing机制的Long却行,另外我也试了一下String。同样可以完成。

我的疑问就是:synchronized为什么不支持基本类型?难道它只支持对象?(对变量/对象而言) synchronized --------------------编程问答-------------------- 当然支持对象了啊 --------------------编程问答-------------------- 其实synchronized也不支持基本类型的封装类,如Long、Integer等都不支持,原因是
Long data;
......
synchronized(data) {
    data--;
}

上面实际上是执行了data = new Long(data-1);
data这个对象都已经变了,怎么去synchronized ?? --------------------编程问答--------------------
引用 2 楼 ncepu307 的回复:
其实synchronized也不支持基本类型的封装类,如Long、Integer等都不支持,原因是
Long data;
......
synchronized(data) {
    data--;
}

上面实际上是执行了data = new Long(data-1);
data这个对象都已经变了,怎么去synchronized ??


那如果我现在就想实现这个同步,就是只对一个long类型的变量进行锁。我使用Long已经转变一次了,难道我要再加一个String对象来专门锁?这好像太费劲了吧。。。

我的需求就是锁一个long类型的变量。大家给点建议,谢谢~ --------------------编程问答--------------------
引用 3 楼 niushuai666 的回复:
Quote: 引用 2 楼 ncepu307 的回复:

其实synchronized也不支持基本类型的封装类,如Long、Integer等都不支持,原因是
Long data;
......
synchronized(data) {
    data--;
}

上面实际上是执行了data = new Long(data-1);
data这个对象都已经变了,怎么去synchronized ??


那如果我现在就想实现这个同步,就是只对一个long类型的变量进行锁。我使用Long已经转变一次了,难道我要再加一个String对象来专门锁?这好像太费劲了吧。。。

我的需求就是锁一个long类型的变量。大家给点建议,谢谢~


定义一个成员变量Object mObj;
每次对你的long变量操作的时候,
synchronized(mObj) {
    data--;//假如这是long变量操作
} --------------------编程问答-------------------- 建议使用一个长度为1的数组对象来同步,这是最节省空间的 --------------------编程问答-------------------- 楼主刚开始学习java吧,这个初期疑惑是正常呢,记住一点就好了,需要使用对象的地方基本类型是不行的,即使jdk1.5以后你或许把基本类型传给基本类型对应的装箱类型是可以通过的,底层做运算的还是对象,祝楼主学习进步,加油 --------------------编程问答--------------------
引用 6 楼 ysjian_pingcx 的回复:
楼主刚开始学习java吧,这个初期疑惑是正常呢,记住一点就好了,需要使用对象的地方基本类型是不行的,即使jdk1.5以后你或许把基本类型传给基本类型对应的装箱类型是可以通过的,底层做运算的还是对象,祝楼主学习进步,加油


嗯,菜鸟一枚。。。正在学java中- - --------------------编程问答-------------------- 把那个long  作为成员变量 封装到对象里, 在对象里加方法同步就是了,如买票系统,我还不知道基本数据类型包装类不能同步,长知识了,以为类都可以synchronized
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,