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 ?? --------------------编程问答--------------------
那如果我现在就想实现这个同步,就是只对一个long类型的变量进行锁。我使用Long已经转变一次了,难道我要再加一个String对象来专门锁?这好像太费劲了吧。。。
我的需求就是锁一个long类型的变量。大家给点建议,谢谢~ --------------------编程问答--------------------
定义一个成员变量Object mObj;
每次对你的long变量操作的时候,
synchronized(mObj) {
data--;//假如这是long变量操作
} --------------------编程问答-------------------- 建议使用一个长度为1的数组对象来同步,这是最节省空间的 --------------------编程问答-------------------- 楼主刚开始学习java吧,这个初期疑惑是正常呢,记住一点就好了,需要使用对象的地方基本类型是不行的,即使jdk1.5以后你或许把基本类型传给基本类型对应的装箱类型是可以通过的,底层做运算的还是对象,祝楼主学习进步,加油 --------------------编程问答--------------------
楼主刚开始学习java吧,这个初期疑惑是正常呢,记住一点就好了,需要使用对象的地方基本类型是不行的,即使jdk1.5以后你或许把基本类型传给基本类型对应的装箱类型是可以通过的,底层做运算的还是对象,祝楼主学习进步,加油
嗯,菜鸟一枚。。。正在学java中- - --------------------编程问答-------------------- 把那个long 作为成员变量 封装到对象里, 在对象里加方法同步就是了,如买票系统,我还不知道基本数据类型包装类不能同步,长知识了,以为类都可以synchronized
补充:Java , Java SE