У меня есть массив, который я разделяю между двумя потоками, и я пытаюсь перебрать и изменить список в одно и то же время. Я не хочу использовать метод итератора, и я также использовал синхронизированный список, но он все еще дает 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' на линии' Список несинхр = Collections.synchronizedList (unsyn) ', так как' unsyn' равно нулю. –
Я не могу отредактировать свой вопрос .. Кажется, что некоторая ошибка рассмотрит «Список unsync' в качестве первой строки –
Amol