synchronized修饰代码块时字符串内容相同锁失败问题
1、错误示例
public void a(String b){
synchronized(b){
}
}
2、解释
在Java中不是显式赋值的字符串如 String a = “a”; 多线程运行的情况下,上例中b的是在堆内创建,所以尽管值一样但不是同一个对象,所以同步失败。
3、解决方法
使用String方法intern(),该方法保证每次取出的字符串都是从常量池中取出,保证是一个对象。
4、参考
http://t.csdn.cn/AAe7T