那和普通意义上的vector或者hashtable的同步是不一样的
它相当于一个连接池,不同的是连接池是从数组里面取连接,而他是从一个hashmap里面取action。
struts为了防止初次初始化action时的并发请求产生的不一致使用了同步
用户的每一次请求都要检测请求的action是否创建,而这个检测是一段synchronized代码段
java不支持双重检查,就只能为了避免小概率事件发生而损失性能。
这里是所有请求必经之路,你所说的没有真正意义上的并发却时时在发生,不信我给你一个例子,
用线程模拟的,只是10个线程同时进行(实际中对应10个用户),请求同时到达几率很大的
它相当于一个连接池,不同的是连接池是从数组里面取连接,而他是从一个hashmap里面取action。
struts为了防止初次初始化action时的并发请求产生的不一致使用了同步
用户的每一次请求都要检测请求的action是否创建,而这个检测是一段synchronized代码段
java不支持双重检查,就只能为了避免小概率事件发生而损失性能。
这里是所有请求必经之路,你所说的没有真正意义上的并发却时时在发生,不信我给你一个例子,
用线程模拟的,只是10个线程同时进行(实际中对应10个用户),请求同时到达几率很大的
解决方案 »
- 新手刚刚入门struts2遇见包冲突问题,求帮助
- JPA和servlet整合的复合型工程
- 请问我用一条sql生成了一个动态bean,然后想用反射来掉这个javabean,但是它们是在一个线程中掉不到那个javabean.
- 看视频上的taglib输入的时候都有提示,为什么我的没有?
- web.xml中的session-timeout的值为-1代表什么意思?
- Tomcat6.0中加入了Admin组件,MyEclipse中启动与外部启动不一样了?
- 关于script的问题,请帮下忙
- microsoft SQL Server 2000 Service Pack 3 为什么打不上!``
- hibernate如何删除多条记录
- jboss与j2eesdk 是不是包含的关系?
- eclipse lomboz j2ee view -〉启动apache tomcat v5.0.x启动怎么出错?
- 简单问题,请热心人回答?
在代码中构造一个容器级别的vector,即使这样做了,业务逻辑也很少由此经过的。
此设计方法是便于集中控制,优点也在于此,因为是系统级的性能上应该不是很差,只要web容器能支持,我想struts就应该能支持,因为到现在还很少听说有这方面的bug
不知道你说的是重工业还是轻工业
struts作为轻量级的框架不错阿
protected Action processActionCreate(HttpServletRequest request,
HttpServletResponse response,
ActionMapping mapping)
throws IOException { // Acquire the Action instance we will be using (if there is one)
String className = mapping.getType();
if (log.isDebugEnabled()) {
log.debug(" Looking for Action instance for class " + className);
}
Action instance = null;
synchronized (actions) { // Return any existing Action instance of this class
instance = (Action) actions.get(className);
if (instance != null) {
if (log.isTraceEnabled()) {
log.trace(" Returning existing Action instance");
}
return (instance);
} // Create and return a new Action instance
if (log.isTraceEnabled()) {
log.trace(" Creating new Action instance");
}
try {
instance = (Action) RequestUtils.applicationInstance(className);
// TODO Maybe we should propagate this exception instead of returning
// null.
} catch (Exception e) {
log.error(
getInternal().getMessage("actionCreate", mapping.getPath()),
e);
response.sendError(
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
getInternal().getMessage("actionCreate", mapping.getPath()));
return (null);
}
instance.setServlet(this.servlet);
actions.put(className, instance);
} return (instance); }
并发的可能性还是比较大 如果没有同步,一旦并发hashmap中一个action就可能对应多个实例(并发的请求分别创建相同的action实例),检验时同步感觉确实影响性能,不过同步是web请求走单一入口所付出的代价