我有一個arrayList,我在兩個線程之間共享,我試圖迭代和修改列表在同一時間。我不想使用迭代器的方法,我也使用了同步列表,但它仍然給出concurrentmodificationexception
。如何迭代和修改這個Arraylist?
代碼如下:
public class testing {
public static void main(String args[]){
ArrayList<String> al = new ArrayList<String>();
List<String> sal=Collections.synchronizedList(al);
String names[] = {"amol","Robin","vikas","shanu","mahesh"};
for(String x :names){
al.add(x);
}
Thread t1 = new Thread(new SyncArrayList(sal));
Thread t2 = new Thread(new SyncArrayList(sal));
t1.setName("T1");
t2.setName("T2");
t1.start();
t2.start();
}
}
class SyncArrayList implements Runnable
{
List<String> unsync ;
SyncArrayList(List<String> l){
this.unsync = l;
}
@Override
public void run() {
displayUnsyncList();
addNames();
}
void displayUnsyncList(){
synchronized(this){
ListIterator<String> itr = unsync.listIterator();
while(itr.hasNext()){
String x = itr.next();
System.out.println("Thread " +Thread.currentThread().getName() + " is displaying name : "+x);
}
}
}
void addNames(){
unsync.add("preet");
}
}
此代碼應拋出'NullPointerException'就行'列表 UNSYNC = Collections.synchronizedList(unsyn);','以來unsyn'爲空。 –
我無法編輯我的問題..似乎是一些錯誤考慮'列表異步'作爲第一行 –
Amol