當一個代碼段正對集合進行枚舉而另一段代碼試圖修改這個集合時
在撰寫多線程代碼時
Exception in thread
這個異常產生的原因有幾個
這個解決辦法的第一步就是同步代碼
private List list;
public void add(Object obj) {
synchronized(list) {
list
}
}
public void perform( ) {
Iterator iterator = null;
synchronized(list) {
iterator = new CopiedIterator(erator( ));
}
while(iterator
// perform resource or cpu hungry work
}
}
重要的是記住
public class CopiedIterator implements Iterator {
private Iterator iterator = null;
public CopiedIterator(Iterator itr) {
LinkedList list = new LinkedList( );
while(itr
list
}
erator = erator( );
}
public boolean hasNext( ) {
return erator
}
public void remove( ) {
throw new UnsupportedOperationException(
}
public Object next( ) {
return erator
}
}
枚舉器的只讀拷貝將用在同步狀態上的時間減少到最小
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19628.html