Java中使用synchronized锁定字符串

synchronized (someString){
    //xxxx
}

如果someString是动态生成的,则无法锁住,因为虽然字符串内容是相同的,但是不是同一个字符串对象。

解决办法是改成这样

synchronized (someString.intern()){
    //xxxx
}

String的intern()方法可以使得内容一样的字符串,指向同一个内存地址

java6中字符串池是固定大小,java7、8是可修改大小。

java7是1009,java8是25k-50k

参考:

https://blog.csdn.net/u014653197/article/details/76177277

http://silencegg.iteye.com/blog/2069267

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注