【发布时间】:2021-05-31 09:46:59
【问题描述】:
这是一个理论问题。我想了解在 Spring Boot 中使用 CRUD 存储库时出现ConcurrentModificationException 的可能原因。
更准确地说,我有一个特定的问题,我希望得到“是”或“否”的答案。知道异常有时会被myRepository.saveAll(myArrayList); 行抛出,并且myRepository 在不同的线程中被使用,这个saveAll 和findById,是否有可能在@987654326 的不同线程中并行执行@ 和 findById 会产生这样的异常吗?我希望答案是“不”,但我不确定。如果答案是“是”,我将不清楚如何解决问题。
如果答案是“否”,是否会导致有时会引发此异常的唯一情况是在不同线程中同时使用myArrayList(我的代码这样做),即修改(添加元素) myArrayList 由一个线程执行,而 saveAll 正在另一个线程中执行?如果是这样,将saveAll 和myArrayList.add(...) 代码包含在synchronized (myArrayList) {} 中是否足够?
为了完整起见,myRepository 是一个简单扩展 CrudRepository 的接口,并带有 @Repository 和 @Transactional 注释。
感谢您的澄清。
【问题讨论】:
-
即使 Spring
CRUDRepository可能是一个问题(据我所知它们是threadsafe),在不同步的情况下使用来自不同线程的ArrayList实例是不安全的
标签: spring-boot