账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Druid连接池源码中的 这段代码是什么意思?
    9
    0
    源码文件:DruidDataSource源码1571行 private DruidPooledConnection getConnectionInternal(long maxWait) throws SQLException {}在这个getConnectionInternal方法 for循环中如果 createDirect为true则直接创建物理连接。而这个createDirect一开始为false,当满足如下条件的时候才会被置为true if (createScheduler != null && poolingCount == 0 && activeCount < maxActive && creatingCountUpdater.get(this) == 0 && createScheduler instanceof ScheduledThreadPoolExecutor) { ScheduledThreadPoolExecutor executor = (ScheduledThreadPoolExecutor) createScheduler; if (executor.getQueue().size() > 0) { createDirect = true; continue; } }这段代码表达的意思没理解,求解释。主要是 为什么要判断 executor.getQueue().size>0, 线程池的任务队列中有任务才会直接创建?为啥有任务的时候才需要直接创建? 有任务的时候往队列中添加创建任务不可以吗?问题2: 在for 中如果createDirect为true 且cas成功,会创建物理连接,如下PhysicalConnectionInfo pyConnInfo = DruidDataSource.this.createPhysicalConnection(); holder = new DruidConnectionHolder(this, pyConnInfo);然后在下面的代码又会执行 if (maxWait > 0) { holder = pollLast(nanos); } else { holder = takeLast(); }这不会导致 先创阿金的DruidConnectionHolder被丢弃了吗?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答