为什么包装类不适合做锁的对象

“Integer 和 String 类型的对象不适合做锁”,其实基本上所有的基础类型的包装类都不适合做锁,因为它们内部用到了享元模式,这会导致看上去私有的锁,其实是共有的;享元模式里面对数据进行了缓存,会导致好几部分代码拥有同一把锁:
例子:
a和b就是同一把锁(看源码【对常用的数据进行缓存】)
为什么包装类不适合做锁的对象

class A {
Long a = new Long(2);
synchronized(a){
// 业务
}
}
class B {
Long b = new Long(2);
synchronized(b){
// 业务
}
}