@Cacheable会阻塞线程?
时间: 2023-05-31 11:03:12 浏览: 81
不会。@Cacheable注解的作用是将方法的返回值缓存起来,在下一次使用相同参数调用该方法时直接返回缓存结果,不会阻塞线程。但是在第一次调用该方法时,如果缓存中没有对应的结果,则会执行方法体中的代码,这个过程可能会阻塞线程,但是和@Cacheable注解本身没有关系。
相关问题
Cacheable sync
在使用缓存的时候,可以通过设置@Cacheable的sync属性来实现缓存的同步。sync属性的默认值为false,表示在多线程环境下,多个线程可以同时进入计算,并且可能导致多次计算,而违反了缓存的目的。但是当sync属性设置为true时,底层会将缓存锁住,只有一个线程可以进入计算,其他线程则会被堵塞,直到返回结果更新到缓存中。这样可以保证在多线程环境下只计算一次,并且将结果更新到缓存中。比如在使用@Cacheable注解时可以使用sync属性来实现缓存的同步,例如:@Cacheable(cacheNames="books", key="#map['bookid'].toString()", sync=true) public Book findBook(Map<String, Object> map);<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [ck-jesse#l2cache#二级缓存最佳实践用法1](https://download.csdn.net/download/weixin_35780601/86259627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict](https://blog.csdn.net/yb223731/article/details/107619718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文