코드를 Java 또는 다른 코드로 변환하는 소프트웨어를 설계하려고합니다. 그러나 반복적으로 ConcurrentModificationException을 받고 .. 하지만 연결된 목록에 대한 액세스가 여러 위치에서 발생하기 때문에 부울을 사용하여 concurrentModification을 방지 할 수는 없습니다.LinkedList의 ConcurrentModificationException
그래서 해결책으로 아래 어댑터 클래스를 만들었습니다. 그러나 다음 메소드에서도 같은 예외가 발생합니다. ...
가 대단히 감사합니다 ... 목록을 반복 할 때ConcurrentModificationException
는 일반적으로 발생합니다
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListAdapter<T> extends LinkedList<T>{
@Override
public boolean add(T t){
boolean b;
synchronized(this){
b = super.add(t);
}
return b;
}
@Override
public T remove(){
T t;
synchronized(this){
t = super.remove();
}
return t;
}
@Override
public Iterator<T> iterator(){
final LinkedListAdapter<T> adap = this;
return
new Iterator<T>(){
private Iterator<T> iter;
{
synchronized(adap){
iter = LinkedListAdapter.this.getIterator();
}
}
@Override
public boolean hasNext() {
boolean b;
synchronized(adap){
b = iter.hasNext();
}
return b;
}
@Override
public T next() {
T t;
synchronized(adap){
t = iter.next();
}
return t;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
protected Iterator<T> getIterator() {
Iterator<T> iter;
synchronized(this){
iter = super.iterator();
}
return iter;
}
}
@SLaks는 "당신이 해결되면 작동됩니다." – josefx
@josefx : 요점은 그의 질문이 문제를 완전히 거꾸로 다루는 것입니다. – SLaks
예. 맞습니다. 내가 단일 스레드를 사용했기 때문에 소프트웨어를 설계 할 때 어떤 멀티 스레딩 문제도 예상하지 못했습니다. 그러나 paintComponent를 사용할 때 멀티 스레딩 문제가 예기치 않게 발생합니다. 그런 다음 해결책으로 어댑터를 사용하려고했습니다. 고맙습니다. – maamaa