java 锁定资源的模型客户端服务器架构
java model client server architecture with lock on resources
我必须使用 Java(服务器端)开发客户端服务器架构,但我需要一些建议。
情况:
- 公开动作递减值的服务器
- 服务器有一个名为 Value = integer value 的变量
- 一些客户端可以向服务器发送 decrementValue 请求
服务器,对于每个请求,执行:
-- 如果 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;
}
我必须使用 Java(服务器端)开发客户端服务器架构,但我需要一些建议。
情况:
- 公开动作递减值的服务器
- 服务器有一个名为 Value = integer value 的变量
- 一些客户端可以向服务器发送 decrementValue 请求
服务器,对于每个请求,执行:
-- 如果 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;
}