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

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指向的对象才可能会被垃圾回收器回收。

猜你喜欢

转载自blog.csdn.net/u011411993/article/details/78801494