gpt4 book ai didi

java 。确定两个方法调用具有相似的线程上下文

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:09 24 4
gpt4 key购买 nike

我正在尝试实现一件棘手的事情,需要一些新的想法。问题是:

想象一下 Component1,它正在为集合中的每个 User 执行一些操作。就像

for (User user : users) {
doSomeStuff(user);
}

这些操作有一些共同的部分,这些部分非常耗时,因此目标是仅执行一次(它们包括一些数据库查询等)。

想象一下这种耗时的方法之一:

public Object buildSomething(Object context) {
// some business logic here
}

这个想法是存储结果并与其他用户共享,就像这样

public Object buildSomething(Object context) {
if (sharedResource.contains('something') {
return sharedResource.get('something');
} else {
// some business logic here
sharedResource.put('something', something)
return something;
}
}

谜题是——如何实现这个共享资源?

必须说,这是一个巨大的多层 Web 应用程序,我们不能只更改 doSomeStuff 方法并在其中添加上下文持有者参数,或类似的东西。

我分析了以下变体:

  • session 作用域 bean(用于构建 buildSomething 的 bean)

    问题:用户可以从应用程序注销,使用另一个用户名/密码登录,他仍然具有相同的 Http session ,这意味着他将获得与先前请求状态相同的 bean

    upd:使用 session 范围的另一个问题是基于 spring 的线程池调度程序,它可以在没有任何 http session 的情况下调用 Component1。

  • 线程局部变量

    问题:我们处于 Web 应用程序上下文中,当线程返回到池中时,它可以用于其他用户请求

我尝试找到第二个问题的解决方法,我的问题是:

是否可以分析堆栈跟踪元素并确保 buildSomething 方法的两次调用是由单个用户请求引起的?

发送注意

最佳答案

我认为 session 范围的 bean 是更好的解决方案。您可以管理 session 何时被销毁或创建。当用户注销时,您需要调用“HttpSession.invalidate()”。

有一篇关于 session 生命周期管理的好文章。 http://docstore.mik.ua/orelly/java-ent/servlet/ch07_05.htm

您还可以使用 HttpSession utils 在 session 中存储信息(例如用户名)。

敬礼!

关于 java 。确定两个方法调用具有相似的线程上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25545829/

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