Hi,
ich wollte euch mal Fragen, wie es am Besten ist mit LinkedLists und Threads zu arbeiten.
Ich habe momentan mehrere Threads, die alle von verschiedenen Stellen aus auf die LinkedList zugreifen.
(Thread1: malen, Thread2: berechnen, Thread3: eingaben bearbeiten)
Immer wieder kommt es jetzt vor, dass ein Thread gerade ein Element gelöscht hat, auf das ein anderer zugreifen wollte.
Nun dachte ich halt erstmal an synchronisieren mittels lock() und unlock().
Aber da weis ich gerade nicht recht, wie ich das am Sinnvollsten mache.
Momentan hand habe ich das bearbeiten einer Liste mittels
mit
Wo könnte ich da denn lock() bzw unlock() einbauen?
Ansonsten hatte ich noch 3 andere Ideen, wie ich das Problem lösen könnte:
a) ich gebe nicht die Liste, sondern eine Kopie dieser Liste als Array zurück, wenn etwas gelesen werden soll, so sollte es nicht schlimm sein, wenn aus der original Liste etwas gelöscht wird - oder?
b) ich markiere Elemente nur zum löschen und überspringe diese dann beim auslesen und lasse sie dann immer durch einen Thread löschen. während er löscht müssen die anderen Threads zb warten (ich dachte da daran die getList() so zu modiizieren, dass sie halt nen while(loeschen){} drin hat
c) immer wenn eine lese operation beginnt verbiete ich mittels eines boolean das löschen (also ne eigene remove schreiben und die muss halt warten, bis lesen zu ende mittels while(lesen){}
Meine Frage ist nun:
Wie macht ihr sowas?
Bzw welche meiner Lösungen ist wohl die Beste?
Gruß,
David
ich wollte euch mal Fragen, wie es am Besten ist mit LinkedLists und Threads zu arbeiten.
Ich habe momentan mehrere Threads, die alle von verschiedenen Stellen aus auf die LinkedList zugreifen.
(Thread1: malen, Thread2: berechnen, Thread3: eingaben bearbeiten)
Immer wieder kommt es jetzt vor, dass ein Thread gerade ein Element gelöscht hat, auf das ein anderer zugreifen wollte.
Nun dachte ich halt erstmal an synchronisieren mittels lock() und unlock().
Aber da weis ich gerade nicht recht, wie ich das am Sinnvollsten mache.
Momentan hand habe ich das bearbeiten einer Liste mittels
Java:
// normale bearbeitung
for(ListElement e : Klasse.getList()){
//tue irgendwas
}
//löschen
Klasse.getList().remove(e);
Java:
LinkedList<ListElement> list = new LinkedList<ListElement>();
//...
public LinkedList<ListElement> getList(){
return list;
}
Wo könnte ich da denn lock() bzw unlock() einbauen?
Ansonsten hatte ich noch 3 andere Ideen, wie ich das Problem lösen könnte:
a) ich gebe nicht die Liste, sondern eine Kopie dieser Liste als Array zurück, wenn etwas gelesen werden soll, so sollte es nicht schlimm sein, wenn aus der original Liste etwas gelöscht wird - oder?
b) ich markiere Elemente nur zum löschen und überspringe diese dann beim auslesen und lasse sie dann immer durch einen Thread löschen. während er löscht müssen die anderen Threads zb warten (ich dachte da daran die getList() so zu modiizieren, dass sie halt nen while(loeschen){} drin hat
c) immer wenn eine lese operation beginnt verbiete ich mittels eines boolean das löschen (also ne eigene remove schreiben und die muss halt warten, bis lesen zu ende mittels while(lesen){}
Meine Frage ist nun:
Wie macht ihr sowas?
Bzw welche meiner Lösungen ist wohl die Beste?
Gruß,
David