通过copy引用到局部变量来避免NullPointException

来源:互联网 发布:可以演戏的软件 编辑:程序博客网 时间:2024/05/21 05:39
public int getNumActive() {    // Copy reference to avoid NPE if close happens after null check    GenericObjectPool<PoolableConnection> pool = connectionPool;    if (pool != null) {        return pool.getNumActive();    }    return 0;}

源码来源:commons-dbcp2包中的BasicDataSource.getNumActive()。

解释:connectionPool在判空之前将引用复制给局部变量,这样即使之后另一个线程将connectionPool置为null,垃圾回收器也不会回收connectionPool引用指向的对象,因为局部变量的引用还存在,所以不会报空指针异常。在方法执行完之后,局部变量被释放,此时connectionPool指向的对象才可能会被垃圾回收器回收。

原创粉丝点击