Spring mvc spring mvc中的信号量

Spring mvc spring mvc中的信号量,spring-mvc,semaphore,Spring Mvc,Semaphore,我在SpringMVC框架中使用信号量时遇到了一些问题。 这是我的密码 private static Semaphore sm = new Semaphore(1); public String getOnlineUserList() { CommonResponse result = new CommonResponse(); if(!sm.tryAcquire()){ return "busy"; } //do something Th

我在SpringMVC框架中使用信号量时遇到了一些问题。 这是我的密码

private static Semaphore sm = new Semaphore(1);
public String getOnlineUserList() {
    CommonResponse result = new CommonResponse();
    if(!sm.tryAcquire()){
        return "busy";
    }
    //do something
    Thread.sleep(10000);
    sm.relase();
    return "worked";
}
这是SpringMVC中@服务的一种测试方法,它已自动连接到@控制器

按照我的预期,如果我同时要求使用此方法两次。第一个请求将暂停10秒,然后返回“正在工作”。第二个请求将立即返回“忙”


实际结果是,这两个请求都返回“已工作”,时间间隔为10秒。谁能告诉我为什么?谢谢。

我猜您的控制器方法是同步的或类似的,防止了两个服务调用实际上同时发生。向代码中添加日志将有助于澄清发生了什么。@JBNizet我已经做了进一步的测试。我将睡眠时间设置为1分钟,并在SpringDispatcherServlet的方法doService中添加了一个断点。当线程进入第一个请求的断点时,我立即恢复线程。但是当我继续第二个请求时,它要等待大约15秒才能进入断点,所以它与信号量无关,对吗?也许浏览器正在延迟第二个请求?我将首先使用单元测试,然后使用两个curl或两个单独的浏览器。浏览器开发工具也可能有助于确定延迟的原因。您是对的,信号量在两个不同的浏览器中正常工作,但在我在一个浏览器的两个选项卡中发出这两个请求时不起作用。奇怪的是,浏览器似乎正在序列化(等待1完成后再开始第2次)请求的执行。众所周知,浏览器会并行地提取页面的各个部分,这可能是因为它在完整的URL上有一个内部唯一键。这对于网页的各个部分都是有意义的。当第二次执行可能会得到
304 Not Modified
响应(并使用缓存响应执行第一次执行)时,为什么要并行执行相同的URL两次呢。这就是浏览器使网页快速运行所做的。