加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

struts中Action线程安全隐患

发布时间:2021-11-23 15:19:37 所属栏目:教程 来源:互联网
导读:线程安全:在多线程环境下能正确执行的代码就是线程安全的,安全的意思就是能够正确执行,程序代码执行不出错误等其他异常情况 实例变量:在堆中分配的,并被属于该实例的所有线程共享,所以不是线程安全的 局部变量:在堆栈中分配,因为每个实例都有它自己的
线程安全:在多线程环境下能正确执行的代码就是线程安全的,安全的意思就是能够正确执行,程序代码执行不出错误等其他异常情况
 
实例变量:在堆中分配的,并被属于该实例的所有线程共享,所以不是线程安全的
 
局部变量:在堆栈中分配,因为每个实例都有它自己的堆栈空间,所以是线程安全的
 
J2EE是一个多线程的环境,服务器针对每个请求启动一个线程来处理,所以有可能会有多个线程同时访问一个Servlet实例的情况。在Struts里面也是一样的,有可能会有多个线程同时访问一个Action实例的情况,这时就会出现线程安全的问题,所以要保证Action类中的方法具有“可重入性”,即不可以在Action的方法里改变实例变量的值。
 
在设计Action类时应该注意:
 
1、不要使用实例或静态变量存储特定请求的状态信息,因为它们会在同一个操作中共享跨越请求的全局资源,引发线程安全问题
 
2、如果并行访问资源需要保护,访问就要进行同步(例如:synchronized关键字的使用)
 
3、使用常量是线程安全的,因为只存在读操作
 
4、对构造器的访问(new 操作)是线程安全的,因为每次都创建一个实例,不会访问共享资源
 
5、局部变量也是线程安全的。因为没执行一个方法,都会在独立的空间创建局部变量,它不是共享资源。局部变量包括方法的参数变量。
 

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读