关于对象池的疑问

    
xysniper
07-11-01 8 672

上次在banq的一篇文章中看到:banq大哥其实不提倡使用spring这种单例方式来控制资源,他建议对于业务bean使用对象池技术,数据bean使用缓存,还说使用单例不够,请问banq大哥,你说的数据bean是指查询数据后返回的pojo对象吗?对象池对于频繁使用的对象控制创建的次数,有个条件,如果这个对象创建时开销并不是很大,就没有必要使用对象池,统常一个业务bean创建时根本没有什么开销,使用spring单例管理就行了,还用什么对象池,对于数据bean,如果使用hibernate的时候,hibernate已经有二级缓存,所以使用spring+hibernate就可以解决并发量的问题,请banq说明

banq
2007-11-01 15:25

>如果这个对象创建时开销并不是很大,就没有必要使用对象池
可以这么考虑。我也没说不赞成单例 Jdon框架也使用单例

要注意单例和POOl对于控制资源的作用,POOL有最大值,这样能够阻击超过服务器极限的峰值访问,而单例则不能,这就是为什么现在我们又需要单例又需要POOL的原因。

另外单例如果加同步会将多用户系统变成单用户,这些都是潜在的危险,而POOL则为每个线程开辟专用通道。




[该贴被banq于2007-11-01 15:28修改过]

xysniper
2007-11-01 15:40

>如果按照一个来说,单例一个,那么就只能一个线程也就是一个用户通过访问了,那不是单用户系统吗?

没错,POOL最大10个,10用户同时来,马上分配,这是多任务,但是如果使用将业务bean使用单例,不管有多少个用户/线程来,都会去调用这一个实例,就像在tomcat下的servlet一样,不管有多少个请求来,servlet的实例总是一个,你是什么意思?

xysniper
2007-11-01 15:42

>这样能够阻击超过服务器极限的峰值访问,而单例则不能
为什么?单例总是一个,POOL还得多个的可能,怎么会有超过服务器极限的峰值访问

xysniper
2007-11-01 15:45

>如果按照一个来说,单例一个,那么就只能一个线程也就是一个用户通过访问了,那不是单用户系统吗?

pool我是知道怎么会事,如果pool最大10,我可以将10个业务bean放进去,如果有10用户来,我马上分配出去,这样不错,但如果此业务bean作为单例,不管有多少个用户(jsp线程)来,它总是调用这一个单实例,有什么关系?就像tomcat下的servlet,不管有多少个请求来,servlet总有一个实例,是供多个线程调用,你想说什么?

2Go 1 2 下一页