Some times java.util.ConcurrentModificationException thrown
concurrency, exception, java, spring
Solution
This is from the JavaDoc for `ConcurrentModificationException`:
For example, if a thread modifies a collection directly while it is iterating over the collection with a fail-fast iterator, the iterator will throw this exception.
In your last loop, you sometimes do
user.getSkillsList().add(skillObj);
while iterating using `user.getSkillsList().iterator()`.
Problem
I executing below code but some times i got java.util.ConcurrentModificationException exception..But some times working fine.please let me know where i did wrong code.Below is my code please check my logic also if there is any better way then let me know. ``` public String saveSkills(HttpServletRequest request,@RequestParam String skills,@RequestParam String Email) throws IOException { Domain domain1 = (Domain)request.getSession().getAttribute("Domain"); Long domanId =domain1.getDomainId(); System.out.println(skills); String[] skillsParts = skills.split(","); UserProfile user = userProfileManager.getUserByEmail(domain1.getPrimary_Domain_Id(), Email); if(user.getSkillsList().size()>0){ Iterator it = user.getSkillsList().iterator(); while (it.hasNext()) { Skills skillsitereator = (Skills) it.next(); int count=0; for(int i =0;i<skillsParts.length;i++){ if((skillsParts)[i].equals(skillsitereator.getSkillName())){ break; }else{ count++; } } if(count == skillsParts.length){ it.remove(); userProfileManager.update(user); } } }else{ for(int i =0;i<skillsParts.length;i++){ Skills skillObj = new Skills(); skillObj.setSkillName(skillsParts[i]); user.getSkillsList().add(skillObj); } userProfileManager.update(user); } skillsParts = skills.split(","); System.out.println(skillsParts); ArrayList<Integer> values =new ArrayList<Integer>(); for(int i =0;i<skillsParts.length;i++){ Iterator it = user.getSkillsList().iterator(); while (it.hasNext()) { Skills skillsitereator = (Skills) it.next(); if((skillsParts)[i].trim().equals(skillsitereator.getSkillName().trim())){ break; } else{ Skills skillObj = new Skills(); skillObj.setSkillName(skillsParts[i]); user.getSkillsList().add(skillObj); userProfileManager.update(user); } } } Gson gson = new Gson(); return gson.toJson(user); } ```