Могут ли одновременно работать несколько (или одинаковых) методов в одном экземпляре?

Я пытаюсь создать видеоигру, и меня беспокоит работа с моим объектом мира в нескольких потоках.

Если у меня есть метод «doAction (действие)» и два потока одновременно вызывают этот метод для одного и того же объекта, могут ли они связываться друг с другом? Есть ли что-нибудь, что я должен сделать, например, встать в очередь?

Метод обновит различные сущности игры (в зависимости от действия). «Поля» каждой сущности уже являются ConcurrentHashMap, но я не уверен, что это необходимо.

Из-за взаимодействия с пользователем, помимо основного метода временного шага, который будет вызывать вызовы doAction, также могут быть другие вызовы от сущностей между временными шагами или, возможно, в то же время.

Я не хочу оставлять это в покое и впоследствии столкнуться с трудностями при отладке. Обратите внимание, что мое понимание потоков ограничено, так что поправьте меня, если я что-то не понимаю.

Это зависит: есть ли в вашем классе поля, обновляемые методом?

Andreas 10.01.2019 03:17

Я отредактирую вопрос

BOBONA 10.01.2019 03:22

Это сложно, хотя каждая сущность является ConcurrentHashMap, операция над каждой сущностью является поточно-ориентированной, но если одно действие обновляет несколько сущностей, это может быть опасно, есть и другие опасные случаи. Я думаю, вам следует сначала изучить определение потоковой безопасности, прежде чем приступить к разработке своей игры.

Alex Ding 10.01.2019 03:47

Ваш вопрос слишком широк, как написано, однако похоже, что вам следует использовать synchronize для вашего метода doAction().

Bohemian 10.01.2019 04:08

Это хороший вопрос. Он широкий, потому что с ним сталкиваются многие начинающие программисты, и не «слишком широкий», чтобы его закрывать. Пожалуйста, откройте его снова.

Alexei Kaigorodov 10.01.2019 05:14

"они могли связываться друг с другом?" - да. "Есть ли что-нибудь, что я должен сделать, например, поставить в очередь?" - да, сделайте методы «синхронизированными», и Java сделает все необходимые очереди под капотом.

Alexei Kaigorodov 10.01.2019 05:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
6
44
0

Другие вопросы по теме