作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题我已经想了好几天了。对于许多用户访问该站点的基于客户的 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/
我是一名优秀的程序员,十分优秀!