gpt4 book ai didi

java - 在 Web 容器内部,如何创建/管理具有相同引用变量的同一类的多个对象

转载 作者:行者123 更新时间:2023-12-01 12:46:23 26 4
gpt4 key购买 nike

可能是您听过的最愚蠢的问题。

在 Web 容器内部,如何创建/管理具有相同引用变量的同一类的 1 个以上对象...让我用一个示例进行解释。

在我的 Controller 类中,我有一个代码段

AdminUser adminUser= new AdminUser();

因此,当 2 个管理员登录我的 Web 应用程序时,将会有 2 个具有相同引用变量“adminUser”的 AdminUser 类对象

  1. 怎么可能,是两个不同的线程吗?
  2. 谁在管理这个线程、Web 容器?
  3. 如果是这样,Web 容器是如何做到这一点的,它是否包装了应用程序使用 threadLocal 编写代码?
  4. 如果是不同的线程,则维护一个全局对象(比如一个计数器对于管理员访问计数),“静态”是不够的......它需要改为“ volatile ”,对吗?

最佳答案

So when 2 Admins signs-in to my web application, there will be 2 Objects of the class AdminUser with same reference variable "adminUser"

没有。

如果该行代码位于方法中,则变量位于堆栈上,并且可以有与该方法的并发调用一样多的实例,包括递归和多线程调用。

如果是非静态成员初始化代码,则变量在对象中,有多少个对象就有多少个实例。

如果对象是一个 bean,则它们的数量取决于对象的范围:如果是 application,则为 1;如果是,则为 1。如果是 session ,则每次 session 一个;如果是查看,则每次查看一个;等等

如果它是静态成员初始化代码,则不应该。

How is it possible, is it 2 different threads?

见上文。

Who is managing this threads, web container?

是的,它还管理 bean 实例。

If so, how web container is doing it, is it wrapping application code with threadLocal?

没有。见上文。

If its different threads, to maintain a global object (say a counter for the admins visit counts), "static" won't suffice... it needs to be "volatile" instead, correct?

没有。您可以将其维护为应用程序范围 bean 的实例成员。

除了常量和缓存之外,您还应该避免在网络应用程序中完全避免静态。

关于java - 在 Web 容器内部,如何创建/管理具有相同引用变量的同一类的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661000/

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