Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构建这个并发问题的正确方法是什么?弹簧靴_Java_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Java 构建这个并发问题的正确方法是什么?弹簧靴

Java 构建这个并发问题的正确方法是什么?弹簧靴,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我正在使用Spring Boot构建一个非常简单的游戏。游戏需要的一个特性是能够同时处理多个游戏 所以在我的控制器中,我有这些方法 @Controller @EnableAutoConfiguration public class GameController { private final GameService gameService; @Autowired public GameController(final GameService gameService) { this.gam

我正在使用Spring Boot构建一个非常简单的游戏。游戏需要的一个特性是能够同时处理多个游戏

所以在我的控制器中,我有这些方法

@Controller
@EnableAutoConfiguration
public class GameController {

private final GameService gameService;

@Autowired
 public GameController(final GameService gameService) {
 this.gameService = gameService;
 }

@RequestMapping("/createGame")
@ResponseBody
public String createGameController(@RequestParam(value = 
"playerName") final List<String> playerNames) {
 final String gameId = gameService.createGameAndGenerateGameId(playerNames);
 return "Your gameId is = " + gameId + " \n Give this to other users to  
 challenge!";
  }
另一个特点。所以,当我的用户想要在游戏中执行一个动作时,他们会为他们指定的游戏指定一个特定的gameID。现在,如果有多个线程包含单独的游戏。如何将特定游戏ID映射到线程中的特定游戏

例如:

有3个游戏在三个不同的线程上运行

游戏1/线程1:id=123

游戏2/线程2:id=321

游戏3/线程3:id=213

客户端1发送/startName?游戏ID=321

如何将客户端1请求指定给游戏2/线程2?spring是否为此提供了功能,还是必须在没有spring的情况下完成


谢谢你的阅读

默认情况下,每个请求都在单独的线程中执行。我假设对于每一个新游戏,您都通过增加计数器来创建游戏id。要使其线程安全,请使用
AtomicLong
或代替数字ID创建UUID


关于第二部分,没有类似的内置功能。为什么每个游戏都需要在单独的线程中运行?

默认情况下,每个请求都在单独的线程中执行。我假设对于每一个新游戏,您都通过增加计数器来创建游戏id。要使其线程安全,请使用
AtomicLong
或代替数字ID创建UUID


关于第二部分,没有类似的内置功能。为什么每个游戏都需要在一个单独的线程中运行?

我不知道你如何想象tbh上的工作流程。。。但我想我会让游戏服务来做这个映射吗?@daniu我也想过。然而,我想知道spring在控制器端是否有处理请求/线程管理的功能。目前的情况是,每个请求都“共享”相同的gameId。你是说请求还是回应?如果每个响应都提供相同的gameId,则可能是您的服务不正确。正如Partrick所说,如果您在响应中看到相同的gameId,则gameservice中的某些内容不正确,您的SQL在后端不正确。对于第二部分,由于Game2是使用gameId作为321为client1创建的,因此,每当您向spring发送任何请求以获取client1时,请始终在请求中发送gameId=321,那么所有处理都将在该客户端和gameId的后端进行-321@AmitK Bist好的,所以我假设服务必须处理这样的操作。我现在的问题是,spring是否具有处理此问题的功能?例如,如果我将一个带有gameId的请求从控制器传递给服务,那么如果有多个游戏发生,spring能否自动映射到正确的线程/游戏?或者这是我必须手动完成的事情。我不确定你如何想象tbh上的工作流程。。。但我想我会让游戏服务来做这个映射吗?@daniu我也想过。然而,我想知道spring在控制器端是否有处理请求/线程管理的功能。目前的情况是,每个请求都“共享”相同的gameId。你是说请求还是回应?如果每个响应都提供相同的gameId,则可能是您的服务不正确。正如Partrick所说,如果您在响应中看到相同的gameId,则gameservice中的某些内容不正确,您的SQL在后端不正确。对于第二部分,由于Game2是使用gameId作为321为client1创建的,因此,每当您向spring发送任何请求以获取client1时,请始终在请求中发送gameId=321,那么所有处理都将在该客户端和gameId的后端进行-321@AmitK Bist好的,所以我假设服务必须处理这样的操作。我现在的问题是,spring是否具有处理此问题的功能?例如,如果我将一个带有gameId的请求从控制器传递给服务,那么如果有多个游戏发生,spring能否自动映射到正确的线程/游戏?或者这是我必须手动完成的事情。
@RequestMapping("/startGame")
@ResponseBody
 public String startGameController(@RequestParam(value = 
 "gameId") 
 final String gameId) {
    return gameService.startGame(gameId);
 }