Hallo,
ich habe mir mal ein Testbeispiel gemacht, in dem mein Problem dargestellt ist, ich habe 2 Klassen, in einer Klasse befindet sich eine List, die im EDT- Thread in einer Endlosschleife verwendet wird, und in der 2. Klasse wird dieselbe Liste auch verwendet. Meine Frage wäre nun, wo muss ich auf die Liste überall synchronisieren, auch in der set- Methode usw.
PS: bzw. was mir noch einfällt, blöde frage aber ich stell sie mal, muss man auf die Referenz der Liste synchronisieren (sprich die Referenz muss immer gleichbleiben) oder auf die Liste?
ich habe mir mal ein Testbeispiel gemacht, in dem mein Problem dargestellt ist, ich habe 2 Klassen, in einer Klasse befindet sich eine List, die im EDT- Thread in einer Endlosschleife verwendet wird, und in der 2. Klasse wird dieselbe Liste auch verwendet. Meine Frage wäre nun, wo muss ich auf die Liste überall synchronisieren, auch in der set- Methode usw.
PS: bzw. was mir noch einfällt, blöde frage aber ich stell sie mal, muss man auf die Referenz der Liste synchronisieren (sprich die Referenz muss immer gleichbleiben) oder auf die Liste?
Java:
package threadtest1;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
private final List<String> list;
public Main() {
list = new ArrayList<String>();
ListIteration li = new ListIteration();
li.start();
while(true) {
synchronized(list) {
for(int i = 0; i < 5; i++) {
list.add("Hallo" + i);
}
for(Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String next = iterator.next();
System.out.println("im EDT");
}
li.setList(list);
}
}
}
public static void main(String[] args) {
new Main();
}
}
class ListIteration extends Thread {
private List<String> list;
public ListIteration() {
list = new ArrayList<String>();
}
public void setList(List<String> list) {
this.list = list;
}
@Override
public void run() {
while(true) {
synchronized(list) {
for(Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
final String next = iterator.next();
System.out.println("im Thread");
iterator.remove();
}
}
}
}
}
Zuletzt bearbeitet: