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

iori97king 2007-04-20 11:42:02
关于在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 还不会结束???
编译应该是很快的撒
...全文
237 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
brooksychen 2007-04-21
  • 打赏
  • 举报
回复
楼上正解~~

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

Good luck!
maquan 2007-04-21
  • 打赏
  • 举报
回复
hehe, 这个错误比较常见。

你给 getComplieResult() 加上 synchronized,那么,对“同一个”对象的 getComplieResult() 调用会被同步。但在 Web 环境下,不同的 HTTP request 访问的可能是不同对象的 getComplieResult(),所以就失效了。
iori97king 2007-04-21
  • 打赏
  • 举报
回复
我会很快结帖的....
iori97king 2007-04-21
  • 打赏
  • 举报
回复
你们三位大虾说的 都是单例模式吧。
呵呵,我昨天查资料的时候,也这么说。
或许只能这样吧....谢谢你们。
有谁了解GCC吗? 很郁闷
border88 2007-04-21
  • 打赏
  • 举报
回复
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(...);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧