我正在制作我的第一个客户端服务器应用程序。这是电梯的模仿。我已经在JavaFX上使用spring boot和client part完成了服务器。我的电梯必须在10秒内在楼层之间移动。

这是我发送目标楼层的POST方法:(我不知道为什么,但整数值未到达)

@PostMapping()
    public String postEndPoint(@RequestBody String floor) {
        return elevatorService.setFloor(Integer.valueOf(floor));
    }


设置方法:

public String setFloor(Integer floor) {
        if (!isPressed(floor)) { // if button isn't pressed, add to list
            list.add(floor);
        }
        targetFloor = list.get(list.size() - 1);
        motion();
        if (list.get(list.size() - 1) == currentFloor) { // when we arrive, delete pressed button
            list.remove(list.size() - 1);
        }
        return String.valueOf(floor);
    }

 private boolean isPressed(Integer floor) {
        return list.contains(floor);
    }


和运动逻辑:

private void motion() {
        new Thread(() -> {
            try {
                    Thread.sleep(10000);
                    if (currentFloor < targetFloor) {
                        currentFloor++;
                    } else {
                        currentFloor--;
                    }
                    if (currentFloor != targetFloor) {
                        motion();
                }
            } catch (InterruptedException ignored) { }
        }).start();
    }


如果我单击所需的楼层并等待电梯到达时等待,则效果很好,但如果同时呼叫多个楼层的电梯,则效果不佳。
有人可以帮我解决这个问题吗?谢谢。

最佳答案

我确定您的问题是您没有使用原子值。更改Atomic Integer对象的原始整数。

建议您阅读以下内容以了解有关为什么以及如何使用原子值的更多信息:https://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html

09-26 15:15