servlet非线程安全,解决办法
来源:互联网 发布:个人工作计划安排软件 编辑:程序博客网 时间:2024/05/19 22:55
Servlet 之所有效率比CGI高,是因为CGI每一个请求都会FORK出一个进程来处理相应的请求,而Servlet则是用线程来处理的,但随之而来就有一个问题:多线程的安全问题!
在Servlet中,类的成员变量是共享的,所有的请求都共用成员变量,为了保证线程安全,我们应该尽量做到如下几点:
1.用方法变量,即局部变量来保存请求中的专有数据,因为每个线程都会有自己的一份局部变量,这样就不会相互影响了。
2.成员变量只保存那些不会改变的数据。道理很简单,因为所有的线程共享一份,如果严格保证只读的话,就不会存在线程间相互影响的情况。
3.如果有些成员变量可能被修改,但又不得不作为成员变量的时候,请同步访问那些变量
4.如果访问读写外部资源,那么需要同步访问这些资源
5.同步的模块越小越好,因为同步以后意味着一次只能有一个线程对访资源进行请求,如果模块太大了必然会影响服务器的效率。
6.不建议同步services,doGet,doPost方法,因为对这些方法进行同步就意味着一次只能服务一个请求,严重影响服务器性能。
7.不建议使用SingleThreadModel,该接口只是个标记接口,告诉服务器一次只能有一个线程,缺点和第6条的一样。
在Servlet中,类的成员变量是共享的,所有的请求都共用成员变量,为了保证线程安全,我们应该尽量做到如下几点:
1.用方法变量,即局部变量来保存请求中的专有数据,因为每个线程都会有自己的一份局部变量,这样就不会相互影响了。
2.成员变量只保存那些不会改变的数据。道理很简单,因为所有的线程共享一份,如果严格保证只读的话,就不会存在线程间相互影响的情况。
3.如果有些成员变量可能被修改,但又不得不作为成员变量的时候,请同步访问那些变量
4.如果访问读写外部资源,那么需要同步访问这些资源
5.同步的模块越小越好,因为同步以后意味着一次只能有一个线程对访资源进行请求,如果模块太大了必然会影响服务器的效率。
6.不建议同步services,doGet,doPost方法,因为对这些方法进行同步就意味着一次只能服务一个请求,严重影响服务器性能。
7.不建议使用SingleThreadModel,该接口只是个标记接口,告诉服务器一次只能有一个线程,缺点和第6条的一样。
- servlet非线程安全,解决办法
- Servlet非线程安全
- servlet线程安全的解决办法
- queue非线程安全及多线程解决办法
- 非线程/线程安全
- 线程安全、非线程安全
- Servlet 线程安全
- servlet线程安全
- servlet线程安全
- servlet线程安全
- Servlet 线程安全
- Servlet线程安全
- servlet的线程安全
- Servlet的线程安全
- Servlet线程安全
- Servlet 线程安全
- Servlet与线程安全
- servlet 线程安全
- c++中new和delete的那些事1
- TCP协议理解
- STL中的常用的vector,map,set,Sort用法
- Frame-By-Frame Animations的使用方法
- C#字符串和正则表达式参考手册(笔记)
- servlet非线程安全,解决办法
- [python学习]列表复制
- 使用wireshark分析网络报文
- C#创建动态数组
- 某些网站
- 使用neoclipse
- Exchange Server2010的部署规划(一)
- neo4j的入门示例
- TreeSet中实现自己的Comparator,以及常见的Collections方法的使用