gpt4 book ai didi

java - Spring 请求范围与 java 线程本地

转载 作者:IT老高 更新时间:2023-10-28 13:52:00 28 4
gpt4 key购买 nike

大量(每秒约 50,000 个请求)java web-app 我正在使用 ThreadLocal 来执行一个任务,该任务应该在每个请求范围内执行。

我可以使用 Spring 请求范围实现相同的效果,但我想知道哪个性能更好?

在代码中,使用 ThreadLocal:

private static final ThreadLocal<SomeClass> myThreadLocal = new ThreadLocal<SomeClass>();

对于每个http请求设置:

myThreadLocal.set(new SomeClass());

使用 Spring 请求范围:

@Component
@Scope("request")
public class SomeClass{
...
}

现在,什么会更贵:

myThreadLocal.get();

SpringContext.getBean(SomeClass.class);

不知道有没有人尝试过这样的基准测试?

最佳答案

如果我们考虑传统的 Java 方法,可以从下面的引用中推断出答案要慢得多:

Because reflection involves types that are dynamically resolved, certain Java virtual machine optimizations can not be performed. Consequently, reflective operations have slower performance than their non-reflective counterparts, and should be avoided in sections of code which are called frequently in performance-sensitive applications.

引用自 JavaDoc 关于反射 - http://java.sun.com/docs/books/tutorial/reflect/index.html

所以由于 Spring 使用 ReflectiongetBean() 方法,所以 SpringContext.getBean(SomeClass.class); 方法应该更慢。

编辑:

另请注意,ThreadLocal 还具有嵌入的缓存,因此只要您在这些线程中重复使用信息,它肯定会更快。

关于java - Spring 请求范围与 java 线程本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25406157/

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