Anon 2 Опубликовано 28 августа, 2014 Здравствуйте. Было замечено, что у некоторых методах, например в L2ItemInstance, метод updateDatabase синхронизирован. Вопрос1: целесообразно использовать synchronized в методах, которые считывают/записывают данные в MySQL базу? Вопрос2: в каких ещё случаях в сборках может потребоваться использовать synchronized? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
dislike 302 Опубликовано 28 августа, 2014 (изменено) Без неё никуда, например линейно обрабатывать дроп: сначала отправлять пакеты, а потом загружать в бд, согласись как то не очень звучит. Конечно есть и свои минусы, синхронизация требует дополнительных ресурсов. Изменено 28 августа, 2014 пользователем dislike Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anon 2 Опубликовано 28 августа, 2014 Насколько мне известно, пакеты отправляются в отдельном потоке, когда обновление базы происходит в том же самом. Учитывая что JVM необходимо некоторое время на создание потока, его запуск и исполнение инструкций, то как ни крути запись в БД произойдет раньше, да и к тому же что отправка пакета, что запись в БД, будет требовать от класса только "get" методы. Т.е. информация, что в пакете уйдет клиенту, что будет записываться в БД одинаковая. Но есть интересный вопрос в таком случае. Каким обзаром синхронизация метода updateDatabase в классе L2ItemInstance спасет от того, что если один поток вошел в синхронизированный метод updateDatabase, а другой параллельный поток в этот момент взял и воспользовался например методом setCount, тем самым изменив значения количества предмета. Получается, что в таком случае в БД может записаться одно значение, а вот уже пакетом информация к клиенту уйдет с другим значением. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты