zoukankan      html  css  js  c++  java
  • 关于数据库连接对象泄露的思考

    在项目里,看到如果有单独创建线程跑的操作,到最后都会主动清空线程里的状态,包括持有的数据库连接池对象。

    后来专门在用AOP写了一个归还数据库连接对象的切面方法。在所有线程对象执行完主体run方法后,都主动清空持有的连接池对象,其目的就是为了防止连接池对象泄露。

    因为在一个项目中,数据库连接池的对象是有限的,而其实连接池对象不是线程安全的,所以一个线程一般就只对应一个连接池对象。

    当新创建一个线程后,并且线程已经执行完了任务,如果不主动回收,那么数据库连接池是不会把这个已经分配出去的连接池对象拿回来复用的。

    除非等到GC的时候,线程对象被回收了,此时连接池对象才会归还。但是在实际项目中,GC的频率不会很高,因此这就导致了,如果有大量的连接池对象没有被回收,就会有耗尽的危险,而那些

    占有着连接池对象的线程也没有使用,这就导致了资源浪费和资源耗尽,最终导致其他线程在执行任务的时候无法获取到连接池对象,也就无法提交事务到数据库了。

  • 相关阅读:
    linux中服务器定时程序设定
    Linux中java项目环境部署,简单记录一下
    四则运算使用栈和后缀表达式
    PAT乙1003
    L7,too late
    PAT乙1002
    L6,Percy Buttons
    如何计算递归算法的时间复杂度
    c#打印(转)
    C中数组与指针【转】
  • 原文地址:https://www.cnblogs.com/skyvalley/p/15554139.html
Copyright © 2011-2022 走看看