Hallo,
ich habe ein Problem und weiß leider nicht weiter.
Folgendes: Ich habe versucht, das Stack System mit Threads nachzubilden (LiFo, Last in, First out).
Ich möchte also, dass wenn ein Thread ein Stack hinzugefügt(push), ein andere Thread diesen dann wieder entfernt(pop).
Das ganze habe ich dann auch geschafft, nun will ich jedoch ein schritt weiter und zwar, sobald Thread 2 erkennt, dass etwas im Stack ist, er diesen nach belieben popen kann. Jedoch nur nach der LiFo Reihenfolge.
Mein Code sieht bis jetzt so aus:
Durch den Slepper wird sichergestellt, das auch erstmal etwas im Stack drin ist bevor es gepopt wird.
Da sonst eine Exception kommt...
Sprich, ich weiß nicht genau wo man wait und notify einbinden muss..
Beispiel Ausgabe:
Falls jemand noch Zeit hat wäre ich sehr dankbar, wenn ich dazu eine Antwort bekommen würde: http://www.java-forum.org/allgemeine-java-themen/161567-reentrantlock-synchronized.html
VIELEN DANK
ich habe ein Problem und weiß leider nicht weiter.
Folgendes: Ich habe versucht, das Stack System mit Threads nachzubilden (LiFo, Last in, First out).
Ich möchte also, dass wenn ein Thread ein Stack hinzugefügt(push), ein andere Thread diesen dann wieder entfernt(pop).
Das ganze habe ich dann auch geschafft, nun will ich jedoch ein schritt weiter und zwar, sobald Thread 2 erkennt, dass etwas im Stack ist, er diesen nach belieben popen kann. Jedoch nur nach der LiFo Reihenfolge.
Mein Code sieht bis jetzt so aus:
Durch den Slepper wird sichergestellt, das auch erstmal etwas im Stack drin ist bevor es gepopt wird.
Da sonst eine Exception kommt...
Sprich, ich weiß nicht genau wo man wait und notify einbinden muss..
Java:
package ÜB4A1;
import java.util.Stack;
public class A3 {
static Stack<Integer> neuerStack = new Stack<Integer>();
public static void main(String[] args) {
Writer writer = new Writer();
Reader reader = new Reader();
writer.start();
reader.start();
}
}
// fügt eine Zahl zwischen 1 - 200 ins Stack
class Writer extends Thread {
public void run() {
StackInOut sio = new StackInOut();
sio.push();
}
}
// ließt den Stack + entfernt
class Reader extends Thread {
public void run() {
StackInOut sio = new StackInOut();
sio.pop();
}
}
//Erzeugt die Zahlen im Stack + löscht diese wieder
class StackInOut {
public synchronized void push() {
for (int i = 0; i < 3; i++) {
int rnd = (int) (Math.random() * 200) + 1;
int push = A3.neuerStack.push(rnd);
System.out.println(Thread.currentThread().getName() + " Stack Push: " + push);
}
}
public synchronized void pop() {
// Sleep wird nur benutzt um zu Testen, ob das Stack-System auch klappt.
// (LIFO)
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 3; i++) {
int pop = A3.neuerStack.pop();
System.out.println(Thread.currentThread().getName() + " Stack Pop: " + pop);
}
}
}
Beispiel Ausgabe:
Java:
Thread-0 Stack Push: 163
Thread-0 Stack Push: 11
Thread-0 Stack Push: 20
Thread-1 Stack Pop: 20
Thread-1 Stack Pop: 11
Thread-1 Stack Pop: 163
Falls jemand noch Zeit hat wäre ich sehr dankbar, wenn ich dazu eine Antwort bekommen würde: http://www.java-forum.org/allgemeine-java-themen/161567-reentrantlock-synchronized.html
VIELEN DANK
Zuletzt bearbeitet: