Guten Morgen,
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");
while ( ! isInterrupted()) {
vergleicheServerLokalDB(ladeDB(true), ladeDB(false));
System.out.println(lokaleListEineBeanDB.toString());
try {
Thread.sleep(1000);
} catch (Exception e) {
interrupt();
}
}
}
[...][/HIGHLIGHT]
Hier soll jetzt wieder auf lokaleListEineBeanDB zugegriffen werden:
[HIGHLIGHT="Java"]public ArrayList<BeanDB> lokaleListEineBeanDB;
private final static Logger log = Logger.getLogger(ThreadLokaleDatenverarbeitung.class.getName());
public ThreadLokaleDatenverarbeitung(ArrayList<BeanDB> lokaleListEineBeanDB) {
this.lokaleListEineBeanDB = lokaleListEineBeanDB;
}
public void run() {
log.info("Thread 2 gestartet");
while ( ! isInterrupted()) {
//vergleicheZeiten();
System.out.println(lokaleListEineBeanDB.toString());
try {
Thread.sleep(1200);
} catch (Exception e) {
interrupt();
}
}
}[/HIGHLIGHT]
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!
JayJay
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");
while ( ! isInterrupted()) {
vergleicheServerLokalDB(ladeDB(true), ladeDB(false));
System.out.println(lokaleListEineBeanDB.toString());
try {
Thread.sleep(1000);
} catch (Exception e) {
interrupt();
}
}
}
[...][/HIGHLIGHT]
Hier soll jetzt wieder auf lokaleListEineBeanDB zugegriffen werden:
[HIGHLIGHT="Java"]public ArrayList<BeanDB> lokaleListEineBeanDB;
private final static Logger log = Logger.getLogger(ThreadLokaleDatenverarbeitung.class.getName());
public ThreadLokaleDatenverarbeitung(ArrayList<BeanDB> lokaleListEineBeanDB) {
this.lokaleListEineBeanDB = lokaleListEineBeanDB;
}
public void run() {
log.info("Thread 2 gestartet");
while ( ! isInterrupted()) {
//vergleicheZeiten();
System.out.println(lokaleListEineBeanDB.toString());
try {
Thread.sleep(1200);
} catch (Exception e) {
interrupt();
}
}
}[/HIGHLIGHT]
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!
JayJay