servlet中的一个共享数据源有没有必要为其加上synchronized

weiwotianyuan 发布于 2012/11/18 15:28
阅读 869
收藏 0
我写了一个servlet,这个servlet高并发的可能性很大,为了节省连接数据库的开销,我在这个servlet的生命周期最开的时候(或者servlet实例生成的时候)生成一个数据源,然后希望以后的每一个线程都去使用这个数据源,这样会不会产生多线程同步问题?有没有必要加上synchronized?我使用的是tomcat7带的jdbc.pool连接池。如果每次都要重新生成连接池的话开销一定很大,想请教一下大家是怎么做的!!!
加载中
0
NoahX
NoahX

会出现你说的问题,不用加同步吧,多连接会慢死的。因为你已经有连接池了,只要正常open与close就可以了。

1、最好不让上servlet长期占用jdbc连接(减小并发),你可以写个dao来完成数据读取。再输出显示。

可以这样理解

List result=dao.read(..);//读取数据库,dao中完成open,resultset,close(注意close的写法)


for(){

      输出页面

}


2、或者调一调连接池的大小与性能指标,或换高性能连接池如BoneCP。

补充:如果你用jndi获取的是tomcat7的连接池,不会有大开销。不然就不叫连接池了。

NoahX
NoahX
getConnection会从连接池中获得新的连接,所以不会受页面并发的影响。 Dao与DataSource为单例,DataSource在Dao构建时一次性传入。
weiwotianyuan
weiwotianyuan
先谢谢你的回答。我是向Dao层传入了一个DataSource类型参数,这个参数所有的servlet共享,然后在Dao中getConnection()获得Connection对象,你觉得我这么做会有什么问题?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部