读书人

多线程中同步的有关问题

发布时间: 2012-03-13 11:21:12 作者: rapoo

多线程中同步的问题
class MBank {
public void take(){
String s = new String( "ss ");//1
String s = "ss "; //2
synchronized(s){ //同步块 }
}
}
请问使用语句1和语句2有什么区别呢?

[解决办法]
第一个是初始化一个新创建的 String 对象,也就是 "ss ",表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。这里是创建了2个对象.
第二个是 "ss "对象的引用指向s,也就是说s存的是对象 "ss "的内存地址而不是对象本身,就像户籍本一样.

[解决办法]
语句1语句2对同步没有影响的啊.

实际的内容是一样的....

相对而言2的效率高于1而已
[解决办法]
通常写同步代码的lock写法如下:
Object lock = new Object();//该对象往往是静态变量,由ClassLoader加载机制保证其唯一。
...
synchronized(lock){ //同步块 }

所以你那两种写法完全没有区别。当然也没什么必要写那么麻烦。另外有个缺点,产生多个该对象的时候,无法同步,因为s可能在不同的对象中是不同的值。

读书人网 >J2SE开发

热点推荐