gpt4 book ai didi

multithreading - Spring DelegatingFilterProxy 多线程关注点

转载 作者:行者123 更新时间:2023-12-01 01:22:55 25 4
gpt4 key购买 nike

在寻找错误时,我遇到了 Spring 3.0.5 源代码 DelegatingFilterProxy我想知道它是否存在性能瓶颈。

鉴于每个 Web 应用程序只有一个 DelegatingFilterProxy 实例(当然是根据 <filter> 声明),我必须假设在高负载下许多工作线程正试图调用 doFilter()方法并行。

现在看一下代码:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws ServletException, IOException {

// Lazily initialize the delegate if necessary.
Filter delegateToUse = null;
synchronized (this.delegateMonitor) {
if (this.delegate == null) {
WebApplicationContext wac = findWebApplicationContext();
if (wac == null) {
throw new IllegalStateException("No WebApplicationContext found: no ContextLoaderListener registered?");
}
this.delegate = initDelegate(wac);
}
delegateToUse = this.delegate;
}

// Let the delegate perform the actual doFilter operation.
invokeDelegate(delegateToUse, request, response, filterChain);
}
synchronized (this.delegateMonitor) block 必须由所有线程通过,这意味着所有工作人员都被迫耐心排队,直到他们被允许进入。

不管为什么需要在这里进行 bean 查找,我怀疑使用 synchronized可以避免使用并行执行 - 可能是通过制作 this.delegate volatile 并仅在需要进行查找的情况下使用同步。

所以我是在叫错树吗?任何输入表示赞赏。

最佳答案

你是对的 - 这似乎是一个潜在的问题,alghouth(正如 Ralph 指出的那样),它不应该很容易被注意到。他们本可以使用双重检查锁定(使用 volatile 委托(delegate))。

我建议您在 spring jira 中创建一个问题。如果你不这样做 - 我会做的。

关于multithreading - Spring DelegatingFilterProxy 多线程关注点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8417232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com