从《Java并发编程实战》这本书里了解到数据库连接对象其实不是线程安全的,所以通常设计的时候一个线程是持有一个单独的不共享的数据库连接对象的。
在项目中,如果是tomcat分发出来用于在服务端执行的线程,线程所持有的数据库连接对象是可以复用的,因为线程是可以复用的
但是对于新建的线程,比如某个线程在服务端运行时,想要多开几个线程用于复杂计算,那么当这些新开的线程执行完之后,一定要记得将他们持有的数据库连接对象回收,否则会造成数据库连接对象泄露。
造成泄露的原因就是,新开的线程在执行完之后并没有马上被回收(因为虚拟机的垃圾回收不会很频繁),这就导致了线程在结束任务执行后会一直持有数据库连接对象,那么此时其他线程就无法获取到这些对象,而数据库连接对象是有限的。
如果是大型项目的复杂业务,且请求量很大的话,就会导致数据库连接对象不够而导致业务无法访问数据库
最近在看项目框架的时候,看到回收数据库连接对象的那几行代码写的注释也是因为数据库连接对象泄露而打上的补丁,证实了这个说法。