锁的公平和效率是一个需要平衡的问题。

    如果配置了maxWait,在连接不够用争用时,unfair模式的ReentrantLock.tryLock方法存在严重不公的现象,个别线程会等到超时了还获取不到连接。

    版本处理方式效果
    0.2.3之前unfair并发性能很好。maxWait>0的配置下,出现严重不公平现象
    0.2.3 ~ 0.2.6fair公平,但是并发性能很差
    0.2.7通过构造函数传入参数指定fair或者unfair,缺省fair按需要配置,但是比较麻烦
    0.2.8缺省unfair,通过构造函数传入参数指定fair或者unfair;如果DruidDataSource还没有初始化,修改maxWait大于0,自动转换为fair模式智能配置,能够兼顾性能和公平性

    可以手工配置

    1. dataSouce.setUseUnfairLock(true)