浏览 8061 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-02-13
public class SecurityService { private UserDao userDao; private DeptDao deptDao; } service在action中被调用。 在Spring的配置中,Bean默认是单例的,我也看到很多例子都是使用的默认配置,但是在Web应用中不会产生同步问题吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-02-13
那你先说说为什么会有同步问题?
|
|
返回顶楼 | |
发表时间:2005-02-13
实际上是我对多线程一直没有理解清楚的缘故。以下是我的理解,请指正:
我知道在Action中不能持有实例变量的,因为Struts对每个ActionClass只会实例化一个,当多个客户端访问Action时可能会同时访问持有的实例变量造成同步问题,如果Service是单例或持有的Dao是单例的话,Service肯定是在访问公共资源的,那也可能被多个客户端同时访问一个实例引起同步问题吧? PS:我曾试图把Action交于Spring管理,使用"Singleton=false"处理,但是好象就不能使用OpenSessionInView了,不知那位碰到过这样的情况。 |
|
返回顶楼 | |
发表时间:2005-02-13
引用 当多个客户端访问Action时可能会同时访问持有的实例变量造成同步问题
如果你持有的实例变量是immutable的,为什么会有同步问题? |
|
返回顶楼 | |
发表时间:2005-02-13
同步问题出现在某一个线程所对应的对象实例(如某servlet的实例)需同时为多个用户服务,同时,该实例中却有对某特定用户所特有的property(如该servlet实例中包含某user对象),这样当为某用户服务时,把特定的property付给了该对象,当VM让该实例为别的用户服务时,就出现了该实例的的property(如该servlet包含的user对象)不正确的状况。
|
|
返回顶楼 | |
发表时间:2005-02-14
哦,也就是说,对于我举的例子来说,由于service对象及其持有的dao对象都是immutable的,并且,对于不同客户端的调用,service的方法工作在不同的执行栈中,因此全部使用singleton是不会有同步问题的。是这样吧?
|
|
返回顶楼 | |
发表时间:2005-02-17
对同一个对象,如果同时有两个线程调用这个对象的同一个方法,那么jvm会自动开两个栈用以存储这个方法内部的变量,所以没有同步问题
|
|
返回顶楼 | |