在 Java 中,遍歷和刪除是需要注意并發的問題,下面我們來逐一分析。
首先,Java 中的集合類是不支持并發的,因此在進行遍歷操作時需要加上同步鎖。比如:
List<String> list = Collections.synchronizedList(new ArrayList<>()); synchronized(list) { Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String str = iter.next(); // 對 str 進行操作 } }
這樣做可以保證遍歷時不會被其它線程添加或刪除元素。
接下來是刪除操作,同樣需要注意并發問題。如果在遍歷時對集合進行刪除操作,就需要使用 Iterator 的 remove() 方法,因為在使用 Iterator 進行操作時,集合的 modCount 屬性會發生改變,如果直接使用集合的 remove() 方法則會導致 modCount 值的不對稱。
List<String> list = new ArrayList<>(); Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String str = iter.next(); if (needToRemove(str)) { iter.remove(); } }
同樣需要注意的是,在遍歷和刪除時一定要保證同步鎖的正確性,否則可能會導致死鎖。
上一篇css圖片如何豎直居中
下一篇python矩陣中的逗號