Hallo zusammen
Ich habe nächste Woche eine Prüfung in Java Multithreading und habe hierzu ein Frage (und weitere werden vermutlich folgen )
Ich habe ein Verständnisproblem im Zusammenhang mit den Monitors und zwar kann ich folgendes nicht so recht verstehen: Wenn ich eine synchronisierte Collection benötige, so muss ich ja meine Zugriffsmethoden nicht synchronisieren, solange ich die Methoden einfach nur delegiere:
Aber in diesem Fall darf ich dies ja nicht mehr so machen:
Nun habe ich es folgendermassen in den Büchern gelesen:
Aber das kann ich nun icht verstehen...
Wieso kann man es nicht einfach so machen:
Könnte mir das jemand erklären? Wäre echt nett!!
Mfg Ishildur
P.S.
By the way. Ich höre immer wieder, Vector sei schlecht! Wie macht man den eine synchronisierte Liste korrekt? Ich habe keine ConcurrentList gefunden?
Ich habe nächste Woche eine Prüfung in Java Multithreading und habe hierzu ein Frage (und weitere werden vermutlich folgen )
Ich habe ein Verständnisproblem im Zusammenhang mit den Monitors und zwar kann ich folgendes nicht so recht verstehen: Wenn ich eine synchronisierte Collection benötige, so muss ich ja meine Zugriffsmethoden nicht synchronisieren, solange ich die Methoden einfach nur delegiere:
Code:
public void add(MyObject obj){
this.syncList.add(obj); // syncList ist ein java.util.Vector
}
Code:
public void add(MyObject obj){
if(this.syncList.contains(obj)) this.syncList.add(obj); // zwischen dem contains und add könnte der Thread unterbrochen werden... PFUI!!
}
Code:
public void add(MyObject obj){
synchronized(this.syncList){
if(this.syncList.contains(obj)) this.syncList.add(obj); // alles paletti
}
}
Wieso kann man es nicht einfach so machen:
Code:
public synchronized void add(MyObject obj){
if(this.syncList.contains(obj)) this.syncList.add(obj); // ist offentbar ungültig, weil mehrere Monitore
}
Mfg Ishildur
P.S.
By the way. Ich höre immer wieder, Vector sei schlecht! Wie macht man den eine synchronisierte Liste korrekt? Ich habe keine ConcurrentList gefunden?