关于struts的多线程问题以及一个简单的socket通信问题
struts的多线程理解是这样的:如果一个action同时接收到多个请求,Actionservlet会为每一个请求创建一个action线程,而每一个action中调用其他类的方法的时候,每一个action都有该方法的一个单独拷贝,所以编写Action的时候不存在多线程问题。请问次观点是不是正确。
另外我想写一个小型的压力测试软件,请各位给点意见:
1.发给server的包应该包括哪些内容:
用httplook可以看到每一个请求内容,包括请求首部,请求体等,类似于
GET /test/test.jsp?id=1&name=tom HTTP/1.1. Accept: image/gif, image/jpeg,*/*. Accept-Language: zh-cn. Accept-Encoding: gzip, deflate. User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) ...
2.如何同时于一个server建立多个skcket连接
谢谢
问题点数:90、回复次数:4Top
1 楼tomuno(特别行动组)回复于 2006-03-12 15:08:43 得分 90
struts是线程安全,并不是指多线程,而是指单态,当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象,execute方法加上了同步关键字,如果你在action里加上一个全局变量,那么,多个客户访问的时候,这个变量是共有的,即一个客户修改了他,下一个客户获得的变量是修改后的,你可以写个demo来测试,至于多线程只是服务器在相应客户端请求时对于session的处理,并不是指struts actionTop
2 楼snoopy_milan()回复于 2006-03-13 15:06:30 得分 0
假设一段简单的代码:
public class LogonAction extends Action {
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)throws Exception {
LogonForm logonForm = (LogonForm) actionForm;
String username = logonForm.getUsername().trim();
String password = logonForm.getPassword().trim();
List userinfo = new ArrayList(); //用户信息
try
{
userinfo = logon.adminLogon(userinfo,username,password);
//--------省略了数据库连接代码,通过userinfo.size()来判断是否登陆成功.
以上代码是否会引起多线程问题,adminLogon使用了局部变量,好像应该没问题,谢谢。
Top
3 楼tomuno(特别行动组)回复于 2006-03-13 18:07:30 得分 0
局部变量没有问题,因为在执行一个类对象的方法时,对于每一个请求线程都会有自己的内存拷贝Top
4 楼DanielYWoo(绿色毒汁)回复于 2006-03-14 11:41:34 得分 0
>>execute方法加上了同步关键字
NO! no synchronized or sync block in Action.execute().
Actions must be programmed in a thread-safe manner, because the controller will share the same instance for multiple simultaneous requests. This means you should design with the following items in mind:Top




