Hi,
ich habe mir ein Programm zusammengebastelt, dass aus mehreren Threads besteht und die gleichzeitig auf eine Methode zugreifen können.
Mein problem besteht nun darin, das der eine Thread "Paul" auf diese Methode zugreift und ein weitere Thread "Hans" dies ebenfalls tun will.
So wenn Hans und Paul dies gleichzeitig tun, dann stürtzt mir das Programm ab (nicht immer aber es kann durchaus passieren). Um das Problem zu lösen hab ich mich ein wenig belsen, hab aber nicht verstanden was ich alles brauche...
ich hab herausgefunden, dass ich meine Methoden mit
schützen kann, dass eben nur Hans oder Paul auf die Methode zugreifen kann und der andere wartet halt solange bis die Methode wieder frei ist... ist das so richtig?
Muss ich meine Varibalen zusätzlich mit dem Keyword "volatile" deklarieren?
Kann ich auf
verzichten, wenn ich meine Methoden mit "synchronized" deklariere?
Muss ich alle veränderung innerhalb der Methode durchführen oder kann ich auch den Rückgabewert veränden? z.B. Mehtode2().verändereHierIrgendwas(); .
Gibt es vllt. noch andere (bessere) möglichkeiten mein problem zu lösen?
danke
Kevin
ich habe mir ein Programm zusammengebastelt, dass aus mehreren Threads besteht und die gleichzeitig auf eine Methode zugreifen können.
Mein problem besteht nun darin, das der eine Thread "Paul" auf diese Methode zugreift und ein weitere Thread "Hans" dies ebenfalls tun will.
So wenn Hans und Paul dies gleichzeitig tun, dann stürtzt mir das Programm ab (nicht immer aber es kann durchaus passieren). Um das Problem zu lösen hab ich mich ein wenig belsen, hab aber nicht verstanden was ich alles brauche...
ich hab herausgefunden, dass ich meine Methoden mit
Java:
private final Lock nichtSchreiben = lock.writeLock();
private final Lock nichtLesen = lock.readLock();
public void Methode() {
nichtSchreiben.lock();
try {
//Hier darf nur ein Thread gleichzeitig zugreifen
} finally {
nichtSchreiben.unlock();
}
}
Muss ich meine Varibalen zusätzlich mit dem Keyword "volatile" deklarieren?
Kann ich auf
Java:
.readLock()
.writeLock()
Muss ich alle veränderung innerhalb der Methode durchführen oder kann ich auch den Rückgabewert veränden? z.B. Mehtode2().verändereHierIrgendwas(); .
Gibt es vllt. noch andere (bessere) möglichkeiten mein problem zu lösen?
danke
Kevin