ืืืืจ ืืคืชืง ืืื Grzegorz Mirek, ืืคืชื ืชืืื ื ืืงืจืงืื (ืคืืืื). ืืื ืืชืืื ืืืชืคืชื ืื'ืืืื ืืคื ื ื-6 ืฉื ืื, ืขืื ืืืื ืืืจืกืืื, ืืืื ืืื ืืฉืคืฉืฃ ืืื ืืืืช ืืช ืืืฉืืจืื ืืชืืื ืื. ืืื ืืชืขื ืืื ืืืืืื ืืืืฆืืขืื ืืืืืคืืืืืืฆืื ืฉื JVM, ืืขื ืื ืืื ืืืชื ืืขืืงืจ ืืืืื ืฉืื .
ืืื ืืฉืืืืช ืืจืืืื ืืช ืืคืืคืืืจืืืช ืืืืชืจ ืื'ืืืื ืืืืืืช: ืื ืืืืื ืืื ืืืืจืืืจืื ืืืืจื ืืืฉืืื ืืืื ืืืืจืืืจืื ืืืืืื? ืืชืฉืืื ืืคืฉืืื ืืืืชืจ ืืื ืืื: ืืืืจืืืจ ืืืืจ ืืืฉืืื ืืืจืง ConcurrentModificationException ืื ืืืืกืฃ ืืฉืชื ื ืืืืื ืืืืืจืฆืื, ืืื ืืืืจืืืจ ืืืื ืืืฉื ืื ืขืืฉื ืืืช. ืืืจืืช ืฉืื ื ืฉืืข ืื ืืฉืืขืืชื, ืขืืืื ืื ืืจืืจ ืืื ืืชืืืื ืืืจืืืื ืืฉืืฉ ืืฉื? ืืคืจืื ืฉืคืช Java ืืื ื ืืืืืจืื ืืช ืืืื ื ืืื ืืืืก ืืืืืจืืืจืื. ืขื ืืืช, ืืฉื ื ืืจืืข ืืกืืจืืืืืช ืฉืื ืื ืชืืจืืชื.
ืฉืื ืื ืชืืจืืชื
ืจืืฉืืช, ืืื ื ืืืืจ ืืื ืฉืื ืื ืชืืจืืชื (ืื ืืงืืื). ื ื ืื ืฉืืฉ ืื ื ืืืกืฃ ืืืฉืืืืืจืืืจ ืคืขืื, ืืชืจืืฉืื ืืื ืฉืื ืืืื ืฉืื ืืืืขืื ืืืืืืจืืืจ ืืื. ืืืงืจื ืื, ืื ื ืืงืืืื ืฉืื ืื ืชืืจืืชื. ืืจืฉื ืื ืืชืช ืืื ืืืืื ืคืฉืืื: ื ื ืื ืฉืืฉ ืื ื ืืื ืฉืจืฉืืจืื. ืืืื ืืจืืฉืื ืืืืจ, ืืืืื ืืฉื ื ืืืกืืฃ ืื ืืกืืจ ืืืื ืืื ืืืืชื ืืืกืฃ. ืขื ืืืช, ืื ื ืืืืืื ืืงืื ConcurrentModificationException ืืืฉืจ ืื ื ืคืืขืืื ืืกืืืื ืขื ืืื ืืืื:List<String> cities = new ArrayList<>();
cities.add(โWarsawโ);
cities.add(โPragueโ);
cities.add(โBudapestโ);
Iterator<String> cityIterator = cities.iterator();
cityIterator.next();
cities.remove(1);
cityIterator.next(); // ะณะตะฝะตัะธััะตั ConcurrentModificationException
ืืฉื ืืืืจ
ืงืืข ืืงืื ืืขืื ืืื ืืืืื ืืืืืจืืืจ ืืืืจ ืืืฉืืื . ืืคื ืฉืืชื ืืืื ืืจืืืช, ConcurrentModificationException ื ืืจืง ืืขืช ื ืืกืืื ืืืืืจ ืืช ืืืืื ื ืืฉื ื ืืืืืืจืืืจ . ืืื ืืืืจืืืจ ืืืืข ืฉืืืืกืฃ ืืฉืชื ื ืืื ืฉื ืืฆืจ? ืืืืืื, ืืืืกืฃ ืขืฉืื ืืืืืช ืืืชืืช ืชืืจืื/ืฉืขื, ืืืฉื lastModified . ืืขืช ืืฆืืจืช ืืืืจืืืจ, ืขืืื ืืืขืชืืง ืฉืื ืื ืืืืืกื ืืืชื ืืืืืืืงื ืืืืจืืืจ. ืืืืจ ืืื, ืืื ืคืขื ืฉื ืงืจื ืืืชืืื next() , ืคืฉืื ืชืฉืืื ืืช ืืขืจื lastModified ืืืืืกืฃ ืขื ืืขืืชืง ืืืืืืจืืืจ. ืืืฉื ืืืื ืืืื ืืฉืืฉืช, ืืืฉื, ืืืืฉืื ืืืืืงื ArrayList . ืืฉ ืื ืืฉืชื ื ืืืคืข modCount ืืืืืกื ืืช ืืกืคืจ ืืคืขืืื ืฉืืจืฉืืื ืฉืื ืชื:final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
ืืฉืื ืืฆืืื ืฉืืืืืจืืืจืื ืืืืืจืื ืืืฉืืื ืคืืขืืื ืขื ืืกืืก ืืืื ืืืืชืจ ืืืื, ืืืืืจ ืืื ืขืจืืื ืืื ืฉ- ConcurrentModificationException ืืืืฉืง ืืืงืจื ืฉื ืฉืื ืื ืืืงืืื. ืื ืืชื ืื ืฆืจืื ืืกืืื ืขืืืื - ืืื ืืฉ ืืืฉืชืืฉ ืืื ืืื ืืืืืช ืฉืืืืืช. ืจืื ืืืืกืคืื ืฉืืื ื ืืืงืืื ืืกืคืงืื ืืืืจืืืจืื ืืืืจื ืืฉื .
ืขืงืืืืช ืืืฉื
ืจืื ืืืืกืคืื ืืืงืืืืื ืืืืืืช java.util.concurrent (ืืืื ConcurrentHashMap ืืจืื Queue ) ืืกืคืงืื ืืืืจืืืจืื ืขืงืืืื ืืืฉืื. ืืืฉืืขืืช ืฉื ืืื ื ืื ืืืกืืจืช ืืืื ืืชืืขืื :- ื ืืชื ืืขืื ืืืชื ืืืงืืื ืืคืขืืืืช ืืืจืืช
- ืื ืืฃ ืคืขื ืื ืืืจืงืื ConcurrentModificationException
- ืืืืื ืฉืื ืืขืืจื ืืืื ืืื ืงืืืืื ืืืื ืฉืืืืืจืืืจ ื ืืฆืจ ืคืขื ืืืช ืืืืืง, ืืืืืืื (ืื ืื ื ืืจืฉืื) ืืฉืงืฃ ืฉืื ืืืื ืืืืื.
GO TO FULL VERSION