java – Spring可缓存不同步

前端之家收集整理的这篇文章主要介绍了java – Spring可缓存不同步前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个单例类(@Service annotated).该类有一个需要200 / 300ms才能执行的方法.

方法使用@Cacheable和synchronized进行注释.

@Cacheable(value="nextPlaying",key = "#startingFrom.getYear() + #startingFrom.getMonth() + #startingFrom.getDay() + #startingFrom.getHours() + #startingFrom.getMinutes() + #locale.getLanguage()")
public synchronized List

通过启动调用方法的多个线程,我看到对于这些200 / 300ms,直到结果未缓存,它会一次又一次地执行该方法,直到缓存为止.
似乎@Cacheable注释没有考虑到同步…
这是一个错误吗?

最佳答案
使用@Cacheable注释时,实现缓存搜索代码不在您的方法中.因此,synchronized修饰符不会影响它.

如果希望所有线程都使用缓存结果,则应创建一个synchronized方法,将调用包装到可缓存的getNextPlaying方法.像这样的东西:

public synchronized List

这些方法在不同的类中非常重要.否则,方面不起作用.

猜你在找的Spring相关文章