加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – Spring可缓存不同步

发布时间:2020-12-15 01:26:29 所属栏目:大数据 来源:网络整理
导读:我有一个单例类(@Service annotated).该类有一个需要200 / 300ms才能执行的方法. 此方法使用@Cacheable和synchronized进行注释. @Cacheable(value="nextPlaying",key = "#startingFrom.getYear() + #startingFrom.getMonth() + #startingFrom.getDay() + #st

我有一个单例类(@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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读