Я пытаюсь создать видеоигру, и меня беспокоит работа с моим объектом мира в нескольких потоках.
Если у меня есть метод «doAction (действие)» и два потока одновременно вызывают этот метод для одного и того же объекта, могут ли они связываться друг с другом? Есть ли что-нибудь, что я должен сделать, например, встать в очередь?
Метод обновит различные сущности игры (в зависимости от действия). «Поля» каждой сущности уже являются ConcurrentHashMap, но я не уверен, что это необходимо.
Из-за взаимодействия с пользователем, помимо основного метода временного шага, который будет вызывать вызовы doAction, также могут быть другие вызовы от сущностей между временными шагами или, возможно, в то же время.
Я не хочу оставлять это в покое и впоследствии столкнуться с трудностями при отладке. Обратите внимание, что мое понимание потоков ограничено, так что поправьте меня, если я что-то не понимаю.
Я отредактирую вопрос
Это сложно, хотя каждая сущность является ConcurrentHashMap, операция над каждой сущностью является поточно-ориентированной, но если одно действие обновляет несколько сущностей, это может быть опасно, есть и другие опасные случаи. Я думаю, вам следует сначала изучить определение потоковой безопасности, прежде чем приступить к разработке своей игры.
Ваш вопрос слишком широк, как написано, однако похоже, что вам следует использовать synchronize для вашего метода doAction().
Это хороший вопрос. Он широкий, потому что с ним сталкиваются многие начинающие программисты, и не «слишком широкий», чтобы его закрывать. Пожалуйста, откройте его снова.
"они могли связываться друг с другом?" - да. "Есть ли что-нибудь, что я должен сделать, например, поставить в очередь?" - да, сделайте методы «синхронизированными», и Java сделает все необходимые очереди под капотом.




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