Другой вопрос о синхронизированном . У меня также есть run () в классе Note, потому что я хочу выводить каждый элемент в заметках каждые 5 минут. Но я всегда получаю исключение: java.util.ConcurrentModificationException, если я пытаюсь проводить больше встреч в основном. поэтому я применяю синхронизированный к списку заметки, которые могут быть добавлены новым собранием, когда я перебираю заметки. Мой метод запуска такой:
Правильно ли это указано в списке записей для синхронизации, чтобы предотвратить ConcurrentModificationException? (В моей программе это работает. Сейчас я не получаю этого исключения)
Классу Meeting и Note может понравиться этот класс:
public class Meeting{
public Meeting(Note note_1,Note note_2){
note_1.addElement(this);
note_2.addElement(this);}
//another method hier
}
public class Note implements Runnable{
public final List<Meeting> notes = new ArrayList<Meeting>();
public void addElement(Meeting n){
entries.add(n);
}
@Override
public void run(){
while(true) {
for(Meeting n : notes){
System.out.println(n.toString);}
}
try{ Thread.sleep(10);}
}
}
}
Я всегда получаю сообщение об ошибке исключения исключение: java.util.ConcurrentModificationException если я пытаюсь сделать больше Встреча в основном, поэтому я изменяю немного в классе Примечание, нравится это:
private static final List<Entry> entries = Collections.synchronizedList(new ArrayList<Entry>());
и выполняется ()
@Override
public void run() {
while(true){
synchronized(notes){
for(Entry n : entries){
//do something
}
}
try {
Thread.sleep(10);
} catch (InterruptedException e ) {
}
}
}
}