我有一个单例类(@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
这些方法在不同的类中非常重要.否则,方面不起作用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。