Spring WebFlux中的竞争条件

kmpatx3s  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(131)

我有一个类声明HmacUtils如下:
第一个月
然后我的类的一个方法使用了HMAC_UTILS.hmacHex方法。
我已经确定了一个与此相关的不稳定测试。对于hmacHex的相同输入,Assert失败,因为有时方法返回的值与期望值不同。这让我想到了比赛的条件。使调用hmacHex的方法synchronized解决了这个问题,这意味着不再有不稳定的测试了。
为什么一些底层的netty线程会以竞态状态结束呢?根据我的理解,我不应该担心spring webflux的竞争条件,因为我自己并没有管理/创建线程。
我认为,在我不直接管理线程的情况下,使用spring webflux时,我不会考虑线程安全性。

suzh9iv8

suzh9iv81#

假设HmacUtils来自ApacheCommonsCodec项目,文档陈述如下(重点是我的)。
这个类是不可变的和线程安全的。**Mac可能不是。
所以HmacUtils本身是线程安全的,通过这个消息,这只能意味着你正在使用的Mac不是线程安全的。默认情况下,它将使用JDK中的Crypto库中的那些。而且我相信其中的MD5摘要确实不是线程安全的。

**注意:**我快速查看了一下,标准库中的MD5正在保持状态,这是在MD5中修改/工作的。所以我认为多个线程不应该共享一个MD5示例。

您可以尝试使用Bouncy Castle库中的MD5,它可能是线程安全的。

相关问题