ich habe ein Problem bezüglich zweier Threads, denen eine ArrayList übergeben wird. Der eine soll die Liste füllen und der andere unabhängig davon auf die Inhalte der Liste zugreifen. Leider kann ich mit dem 2. Thread, der auf die Liste zugreifen soll, dies nicht tun, da die ArrayList in diesem immer leer ist. Mache ich irgendetwas mit den Referenzen falsch?
Hier mein Code (Ausschnitt):
Diese Klasse ruft die beiden Threads auf:
[HIGHLIGHT="Java"]ArrayList<BeanDB> lokaleListEineBeanDB = new ArrayList<BeanDB>();
Thread thread1 = new Thread(new ThreadServerAbgleich(lokaleListEineBeanDB));
thread1.start();
Thread thread2 = new Thread(new ThreadLokaleDatenverarbeitung(lokaleListEineBeanDB));
thread2.start();[/HIGHLIGHT]
In diesem Thread wird die Liste befüllt (fuktioniert auch):
[HIGHLIGHT="Java"]public class ThreadServerAbgleich extends Thread{
public ArrayList<BeanDB> lokaleListEineBeanDB;
private final static Logger log = Logger.getLogger(ThreadServerAbgleich.class.getName());
public ThreadServerAbgleich(ArrayList<BeanDB> lokaleListEineBeanDB) {
this.lokaleListEineBeanDB = lokaleListEineBeanDB;
}
public void run() {
log.info("Thread 1 gestartet");
Die Threads sollen später unabhängig voneinander in längeren Abständen (> 1 min) laufen. Ich hoffe ihr könnt mir in irgendeiner Form helfen. Ich wäre euch echt dankbar!
Hmja, da musst du damit rechnen, dass es Probleme mit ConcurrentModificationExceptions geben wird. So ganz ist mir der Ablauf noch nicht klar. Soll das so eine Art "Producer-Consuber-Pattern" sein? Schau dir ggf. auch mal http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html - da gibt's einige Klassen, die bei sowas helfen können...
Ja, wahrscheinlich kommt es einem Art "Producer-Consumer-Pattern" relativ nahe.
Der Vector brachte auch keine Lösung des Problems. Wenn ich mit dem einen Thread nur lese, müsste ich doch theoretisch nichts synchronisieren, da es in keinem Fall zu einem kritischen Zustand kommen kann, oder?
Mein Problem ist glaube ich einfach die Referenz. Wie kann ich von dem 2. Thread auf ein Objekt (die ArrayList) des 1. Threads zugreifen, welches beiden vorher übergeben wurde?
Ich denke, dass ich die beiden Threads zusammenführen werde. Das ist zumindest eine Lösung, die mich mit dem Programm zum Ziel führt.