首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于在JSP中的一个方法 同时只允许一个客户访问应该如何办

2011-12-24 
关于在JSP中的一个方法 同时只允许一个客户访问应该怎么办?关于在JSP中的一个方法同时只允许一个客户访问

关于在JSP中的一个方法 同时只允许一个客户访问应该怎么办?
关于在JSP中的一个方法   同时只允许一个客户访问应该怎么办?
public   synchronized   String   getComplieResult(SubmitBean   submitBean,UserBean   user,FormatFile   formatFile,String   language)
{
      p=Runtime.getRuntime().exec( "gcc   "+ "\ " "+file.toString);
      p.waitFor();
      .....  
      .....
}
这个方法   已经加了   synchronized  
可是为什么老是可以在任务管理器中中看到好几个   gcc.exe在运行???
难道不是一次只有一个人访问的吗??

还有就是那个GCC     也真晕,GCC编译怎么还要这么长时间??系统没调度??
怎么会出现这个GCC     还不会结束???
编译应该是很快的撒


[解决办法]
hehe, 这个错误比较常见。

你给 getComplieResult() 加上 synchronized,那么,对“同一个”对象的 getComplieResult() 调用会被同步。但在 Web 环境下,不同的 HTTP request 访问的可能是不同对象的 getComplieResult(),所以就失效了。
[解决办法]
楼上正解~~

你要是想在分布式环境下保证同一时刻下只有一个客户访问,可以用设计模式的单例(Singleton)模式,即让这个方法所在的类成为单例类,也就是说只能生成一个实例,然后此方法再用synchronized关键词保证同一时刻只能同一个客户在调用。

Good luck!
[解决办法]
public class Test{
private static Test test=new Test();
private Test(){}
public static Test getTest(){return test};

public synchronized String getComplieResult(SubmitBean submitBean,UserBean user,FormatFile formatFile,String language)
{
p=Runtime.getRuntime().exec( "gcc "+ "\ " "+file.toString);
p.waitFor();
.....
.....
}

}

//外面调用
Test.getTest().getComplieResult(...);

热点排行
Bad Request.