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

标签 java client-server java.util.concurrent concurrent-programming

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

情况:

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

    -- 如果 value = 0 则回答不可能的操作

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

最好的解决方案是什么?

如果客户端同时向服务器发出某些请求,如何保证对服务器中存储的值的独占访问?

谢谢。

enter image description here

最佳答案

这取决于您所说的最佳解决方案是什么意思。如果您只是希望您的程序在并发环境中正确运行,那么您应该 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;
}

关于具有资源锁定的java模型客户端服务器架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30422630/

相关文章:

java - 在 Java (Android) 上将内部类导入主 Activity 时出现问题

c++ - 如何阻止客户端向服务器发送消息?

java - 更新时从服务器到客户端的 RMI 通知

java - Java并发框架的submit方法

Java多线程: Fast alternative to AtomicInteger wanted

java - 优先队列和优先阻塞队列

java - BouncyCaSTLe 签名 : java. security.InvalidKeyException: key 格式无效

java - 在 Eclipse 中使用自动添加的导入时包名称错误

java - 服务返回 0.0 中的纬度和经度

c++ - 从已经关闭的套接字接收数据?