Я новичок в многопоточности, и у меня есть несколько основных вопросов, на которые я не смог получить ответы.Допустим, у меня есть класс с именем BankTransaction, и я хочу обработать случай многопоточности.
CASE 1 (основанный на приложениях синглтон)
@Singleton (Application based singleton)
class BankTransaction {
synchronized void doSomeTransaction() {
// write operation
}
}
Случай 2 (основанный на запросах синглтон)
@Singleton (Request based singleton)
class BankTransaction{
synchronized void doSomeTransaction() {
// write operation
}
}
Вопросы
Пожалуйста, потерпите меня и объясните мне непрофессионала, как мне нужно прояснить ситуацию.
В случае 1, если 1000 пользователейИспользуете один и тот же экземпляр (так как он основан на приложениях) класса BankTransaction и используете метод doSomeTransaction (), запросы для каждого из 1000 пользователей будут медленными?потому что он синхронизирован и будет работать потокобезопасно.Так что, это плохой подход.Правильно ли мое понимание?
В случае 2, если те же 1000 пользователей используют метод doSomeTransaction () класса BankTransaction, каждый получит свои собственные экземпляры класса BankTransaction, и он получитникогда не будь медленным ни для одного из них.Но как мне справиться с состоянием гонки, когда, например, из этих 1000 пользователей 2 из них тесно связаны (муж и жена) и имеют доступ к одному и тому же банковскому счету и одновременно выполняют метод doSomeOperation ().Как мне справиться с этим?потому что оба они снова имеют 2 разных экземпляра класса BankTransaction, и может возникнуть несогласованность данных.