Многие статьи в Интернете указывают, что использование String.intern()
в многопоточной обработке плохо, но я действительно не мог понять, почему это плохо. Использование String.intern()
всегда возвращает уникальную строку из пула строк, не так ли? Если это не так, то Является ли JVM string pool thread local? Если нет, то почему использование String.intern()
для синхронизации в многопоточной среде считается плохим? Таким образом, в следующем случае использования, не будет ли он решить проблему синхронизации:Является ли JVM string pool thread local? Будет ли это причиной каких-либо проблем с этим вариантом использования?
Method1 {
synchronized(Interned string) {
select method {
select query to databse
}
...some processing...
update method {
update query to database
}
}
}
Method2 {
synchronized(Interned string) {
select method {
select query to databse
}
.....some processing....
insert method {
insert query to database
}
}
}
Здесь я синхронизации обоих методов на основе одной общей строки id.I требуется выполнить весь метод в качестве одной транзакции (предотвращающий другой метод даже прочитать базу данных). Но делать это на уровне базы данных вызывает тупик (не препятствуя доступу чтения). Синхронизация с использованием string intern в этом случае имеет проблемы с узким местом или тупиком? Есть ли другой подход к решению проблемы? простите меня за любые неудобства или плохое форматирование.
Если вы используете String для синхронизации, это не так уж плохо, вы можете сделать это: P https://vanilla-java.github.io/2016/04/21/Bad-String.html –
Это, очевидно, проблема [xy] (http://meta.stackexchange.com/a/66378/166789). Вы должны спросить себя, как одна глобальная блокировка базы данных может вызвать тупик, как при обычных обстоятельствах, это невозможно. Должно быть по крайней мере два замка для тупика и использование интернированных строк, поскольку блокирующие объекты не исправляют логическую ошибку в вашем программном обеспечении. – Holger
Спасибо за ответ и извините за неудобства. Я действительно не знал о проблеме xy, но спрашивает мнения экспертов о предлагаемом решении, а разные подходы к одной и той же проблеме не хороши? –