我有一个类声明HmacUtils如下:
第一个月
然后我的类的一个方法使用了HMAC_UTILS.hmacHex
方法。
我已经确定了一个与此相关的不稳定测试。对于hmacHex
的相同输入,Assert失败,因为有时方法返回的值与期望值不同。这让我想到了比赛的条件。使调用hmacHex
的方法synchronized解决了这个问题,这意味着不再有不稳定的测试了。
为什么一些底层的netty线程会以竞态状态结束呢?根据我的理解,我不应该担心spring webflux的竞争条件,因为我自己并没有管理/创建线程。
我认为,在我不直接管理线程的情况下,使用spring webflux时,我不会考虑线程安全性。
1条答案
按热度按时间suzh9iv81#
假设
HmacUtils
来自ApacheCommonsCodec项目,文档陈述如下(重点是我的)。这个类是不可变的和线程安全的。**Mac可能不是。
所以
HmacUtils
本身是线程安全的,通过这个消息,这只能意味着你正在使用的Mac
不是线程安全的。默认情况下,它将使用JDK中的Crypto库中的那些。而且我相信其中的MD5摘要确实不是线程安全的。**注意:**我快速查看了一下,标准库中的MD5正在保持状态,这是在MD5中修改/工作的。所以我认为多个线程不应该共享一个MD5示例。
您可以尝试使用Bouncy Castle库中的MD5,它可能是线程安全的。