gpt4 book ai didi

java - Web应用程序中的线程安全

转载 作者:行者123 更新时间:2023-11-29 08:38:22 27 4
gpt4 key购买 nike

这个问题我已经想了好几天了。对于许多用户访问该站点的基于客户的 Web 应用程序,我是否需要所有后端 Java 类都是线程安全的?例如,如果我的网络应用程序被 100 个客户访问,每个请求是否会在 jvm 中分配给他们单独的一组 java 对象?我正在处理一个没有任何类同步的 Web 项目,我想知道为什么多个 http 请求不共享同一个对象?

最佳答案

您的典型 Web 应用程序具有诸如 servlet、 Controller 、服务和数据访问对象之类的对象,它们没有对话状态,因此可以从并发线程安全地访问。还有一些由请求线程创建的持久实体,通常不会传递给其他线程,它们的范围仅限于创建它们的线程。

有一些基础设施对象,如连接池和 Hibernate session 工厂,需要设计成线程安全的。但是,如果您使用任何一种合理的框架,您通常不必自己创建这些类型的东西。

假设您设法避免在服务或 Controller 等事物中不恰本地保持状态,您的应用程序最可能的错误来源可能是由于开发人员不知道如何以一种意想不到的方式交错数据库操作使用事务。这就是我要注意的。所以 3 件事:

1) 避免服务、 Controller 、daos 中的对话状态,

2) 使用一个框架(spring 就是一个例子)来提供经过验证的线程安全基础设施,并且

3) 了解数据库事务、隔离级别和乐观锁定,并使用它们来确保不同线程访问或更改数据时不会损坏数据。

关于java - Web应用程序中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42148998/

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