baomidou / dynamic-datasource

dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务
https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611
Apache License 2.0
4.75k stars 1.19k forks source link

fix:fix UUID generate blocked #507

Closed ZPZP1 closed 1 year ago

ZPZP1 commented 1 year ago

What kind of change does this PR introduce? (check at least one)

The description of the PR: UUID在jdk版本小于JDK8u112时存在高并发阻塞bug,详情参考:https://heapdump.cn/article/4421829 ,因此采用优化雪花算法的id生成器IdGenerator来生成事务id。 Other information: 问题来源: #504

ZPZP1 commented 1 year ago

JDK8u112前高并发下生成UUID当操作系统中缺少“熵”时,随机数的生成将减慢。当速度变慢时,调用此“java.util.UUID#randomUUID()”API 调用的应用程序线程将被置于 BLOCKED 状态,它们将无法继续前进。

huayanYu commented 1 year ago

不太想引入第三方库

ZPZP1 commented 1 year ago

嗯嗯,我试试用线程私有的SecureRandom对象可不可以解决这个问题。

ZPZP1 commented 1 year ago

已修改为使用线程私有的SecureRandom对象来生成随机数,从而避免高并发下生成种子时的锁竞争。

锁竞争