У меня есть MyObject() extends Thread
, который создает новый MyObject
самого себя в методе run()
. Этот объект имеет List<E>
в качестве члена, из которого я удаляюсь при определенных условиях.
I при создании нового объекта, который я вызываю start()
впоследствии, чтобы запустить его метод run. Но как только я создаю новый объект, он выдает
Exception in thread "Thread-1" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:73)
at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.remove(ImmutableCollections.java:80)
at mypackage.MyMainClass.MyObject.run(MyObject.java:87) <- here I remove from my List
Пример:
public class MyObject extends Thread {
List<SomeType> list = new ArrayList<SomeType>();
SomeType st;
public MyObject(SomeType st) {
this.st = st;
// returns a List of SomeType
list = st.getList();
}
@Override
public void run() {
while(!done) {
SomeType toDelete;
if (condition) {
toDelete = st.getToDelete();
}
// Checks for null etc are done and not important
for (SomeType sometype : list) {
if (somecondition) {
// toDelete is always in that List
list.remove(toDelete)
}
}
if (lastcondition) {
MyObject newObject = new MyObject(this.st);
newObject.start();
}
}
}
}
Почему я получаю эту ошибку? Поскольку список является членом каждого экземпляра объекта, почему он неизменен для новых потоков, а не для моего начального объекта?