java 锁定资源的模型客户端服务器架构

java model client server architecture with lock on resources

我必须使用 Java(服务器端)开发客户端服务器架构,但我需要一些建议。

情况:

  1. 公开动作递减值的服务器
  2. 服务器有一个名为 Value = integer value 的变量
  3. 一些客户端可以向服务器发送 decrementValue 请求
  4. 服务器,对于每个请求,执行:
    -- 如果 value > 0 value = value - 1 并向客户端回答新的 val

    -- if value = 0 回答不可能的操作

因此,如果value = 2,同时有3个请求到达,则只有2个请求可以递减value。

最好的解决方案是什么?

如果某些请求同时从客户端到服务器完成,我如何保证对存储在服务器中的值的独占访问?

谢谢。

这取决于您所说的最佳解决方案。如果您只是希望您的程序在并发环境中正确运行,那么您应该 synchronize 并发修改的数据。这将是启用对共享数据的独占访问的标准(且可读)方式。

但是,如果这不是您的问题,而是理论上 Java 中最有效的方法是什么(或者如果这是在极其并发的上下文中调用的),那么我的建议如下:

static final AtomicInteger atomicInteger = new AtomicInteger(initialValue);
...
if (atomicInteger.get() <= 0) {
    return "imposibble. value=0";
}
int result = atomicInteger.decrementAndGet();
if (result < 0) {
    atomicInteger.incrementAndGet(); // Revert the effect of decrementing
    return "imposibble. value=0";
} else {
    return "new value=" + result;
}