synchronized
块。
字符串文字位于内部,Character
、Boolean
和 Number
文字可以从缓存中分配。
正因为如此,可能系统的其他某些部分(使用通过相同的文字进行了初始化的对象)其实才包含对完全相同的对象的引用。 如果锁对象被认为是 private 对象,这可能会产生意外的死锁情况。
示例:
class Main {
final String mutex = "Mutex";
void method() {
synchronized (mutex) {
}
}
}
使用警告所有可能的文字选项,可以报告 String
、Character
、Boolean
和 Number
对象的任何同步。