Skip to content

Druid锁的公平模式问题

温高铁 edited this page Jul 26, 2013 · 6 revisions

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

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

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

可以手工配置

  dataSouce.setUseUnfairLock(true)
Clone this wiki locally