Skip to content

Druid锁的公平模式问题

Shaojin Wen edited this page Aug 5, 2024 · 7 revisions

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

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

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

可以手工配置

dataSouce.setUseUnfairLock(true)
Clone this wiki locally