SSH下单例跟并发的关系
刚研究单例。似懂非懂。请教个问题一般SSH项目中,把DAO,Service层设置为单例,把action层设置成prototye。那单例会不会影响到并发数?比如现在有10个...
刚研究单例。似懂非懂。请教个问题
一般SSH项目中,把DAO,Service层设置为单例,把action层设置成prototye。那单例会不会影响到并发数?比如现在有10个人要去把修改某个属性的值,那不是要9个人一直等待。虽说时间不长。
希望高手帮忙指导下!多谢 展开
一般SSH项目中,把DAO,Service层设置为单例,把action层设置成prototye。那单例会不会影响到并发数?比如现在有10个人要去把修改某个属性的值,那不是要9个人一直等待。虽说时间不长。
希望高手帮忙指导下!多谢 展开
2个回答
展开全部
首先,一个类并不是每次只能一个线程拥有和执行的,所以,你认为的要9个人一直等待是不存在的。除非你将某个方法声明为 synchronized。
另外,DAO,Service 这些类一般情况下都是“无状态”的类,即执行方法过程中,不会改变类本身属性的取值。所以,不同的线程同时执行这个类的方法,不会引起同步问题,因此,这种类称为“线程安全”的类,这种类可以设为单例以便提高内存利用率和执行速度。
另外,DAO,Service 这些类一般情况下都是“无状态”的类,即执行方法过程中,不会改变类本身属性的取值。所以,不同的线程同时执行这个类的方法,不会引起同步问题,因此,这种类称为“线程安全”的类,这种类可以设为单例以便提高内存利用率和执行速度。
追问
那设置synchronized,就会影响到并发问题了?再请教个问题哦。比如一个用户执行一次操作(比如修改),要调用一次dao,然后通过session.update()去修改,那另外一个用户也“同时”要调用这个Dao,然后也通过session.update()执行修改,这个就是二个线程?那现在两个线程要同时调用单例Dao层,执行一次修改操作。不是一个要等待吗
追答
是的,是两个线程。
两个线程同时调用一个实例,并不意味着必须一个执行完才能轮到第二个。
类的方法代码、静态变量等是装载到方法区(Method Area),一个类的实例,是放在堆区,都是给所有线程共享的。一个线程执行一个实例的方法时,是定位到这个实例的类对应的方法区,并执行里面的字节码。执行这些字节码并不需要一个一个线程进行。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询