- 1
- 0
- 约3.38万字
- 约 28页
- 2021-11-12 发布于广东
- 举报
1.Struts 中 Action 是线程安全的吗?如果不是, 请说出理由. 在 Struts 可以定义静态变量吗?
参考答案 :
Servlet 是在多线程环境下的。即可能有多个请求发给一个 servelt 实例,每个请求是一个线
程。
struts 下 的 action 也 类 似 , 同 样 在 多 线 程 环 境 下 。 可 以 参 考 struts user guide:
/struts-action/userGuide/building_controller.html 中 的 Action Class
Design Guidelines 一节 : Write code for a multi-threaded environment - Our controller servlet
creates only one instance of your Action class, and uses this one instance to service all requests.
Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to
write thread-safe Servlets.
译:为多线程环境编写代码。 我们的 controller servlet 指挥创建你的 Action 类的一个实例, 用
此实例来服务所有的请求。因此,你必须编写线程安全的 Action 类。遵循与写线程安全的
servlet 同样的方针。
1.什么是线程安全的代码
在多线程环境下能正确执行的代码就是线程安全的。
安全的意思是能正确执行,否则后果是程序执行错误,可能出现各种异常情况。
2.如何编写线程安全的代码
很多书籍里都详细讲解了如何这方面的问题, 他们主要讲解的是如何同步线程对共享资源的
使用的问题。主要是对 synchronized 关键字的各种用法,以及锁的概念。
Java1.5 中也提供了如读写锁这类的工具类。这些都需要较高的技巧,而且相对难于调试。
但是,线程同步是不得以的方法 ,是比较复杂的 ,而且会带来性能的损失。等效的代码中,不
需要同步在编写容易度和性能上会更好些。
我这里强调的是什么代码是始终为线程安全的、是不需要同步的。如下 :
1)常量始终是线程安全的,因为只存在读操作。
2)对构造器的访问 (new 操作 )是线程安全的,因为每次都新建一个实例,不会访问共享的资
源。
3)最重要的是 :局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部
变量,它不是共享的资源。局部变量包括方法的参数变量。
struts user guide 里有:
Only Use Local Variables - The most important principle that aids in thread-safe coding is to use
only local variables, not instance variables , in your Action class.
译: 只使用用局部变量。 --编写线程安全的代码最重要的原则就是,在 Action 类中只使用局
部变量,不使用实例变量。
总结:
在 Java 的 Web 服务器环境下开发, 要注意线程安全的问题。 最简单的实现方式就是在 Servlet
和 Struts Action 里不要使用类变量、实例变量,但可以使用类常量和实例常量。
如果有这些变量,可以将它们转换为方法的参数传入,以消除它们。
注意一个容易混淆的地方:被 Servlet 或 Action 调用的类中 (如值对象、领域模型类 )中是否
可以安全的使用实例变量?如果你在每次方法调用时
新建一个对象, 再调用它们的方法, 则不存在同步问题 因为它们不是多个线程共享的资源,
只有共享的资源才需要同步 而 Servlet 和 Action 的
您可能关注的文档
最近下载
- 围栏安装工程施工方案.docx VIP
- 专题03 文学类文本阅读【真题汇编】(2021-2025)五年高考真题语文分类汇编 含答案解析.pdf VIP
- 2026年黑龙江农业职业技术学院单招语文考试卷.docx VIP
- 第二章 社会保障制度的产生和发展.ppt VIP
- 小学教学课件:三角形的认识.pptx
- 数字赋能乡村振兴(数字乡村)整体解决方案(38页 PPT).pptx VIP
- 乡村振兴战略数字乡村总体设计解决方案(69页 PPT).pptx VIP
- 《企业战略管理》期末考试复习题库(含答案).docx VIP
- 血流导向装置治疗颅内动脉瘤的问题与展望.pptx VIP
- 社会保障制度的产生和发展.doc VIP
原创力文档

文档评论(0)