Hallo Leute!
Ich habe jetzt einmal das Consumer-Producer Problem in Java realisiert.
Nun bin ich mit einem guten Freund im "Clintsch", da er der Überzeugung ist, dass meine Lösung absolute ... ist.
Daher bitte ich euch für ein kleines Feedback, was ihr dazu meint.
MAIN.java
STACK.java
Danke für eure Hilfe!
Lg TINMI
Ich habe jetzt einmal das Consumer-Producer Problem in Java realisiert.
Nun bin ich mit einem guten Freund im "Clintsch", da er der Überzeugung ist, dass meine Lösung absolute ... ist.
Daher bitte ich euch für ein kleines Feedback, was ihr dazu meint.
MAIN.java
Java:
public static void main(String[] args) {
// OBJEKT DES STACKS
Stack stack = new Stack();
// CONSUMER THREAD
Thread consThread = new Thread(() -> {
try {
stack.consume();
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
});
// PRODUCER THREAD
Thread prodThread = new Thread(() -> {
try {
stack.produce();
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
});
// STARTEN DER THREADS
consThread.start();
prodThread.start();
// THREADS JOINEN
try {
consThread.join();
prodThread.join();
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
STACK.java
Java:
// STACK IN FORM EINER INTEGER LINKEDLIST
LinkedList<Integer> list = new LinkedList<>();
// MAXIMALE KAPAZITÄT DES STACKS
int capacity = 2;
// SYNCHRONIZED METHODE ZUM AUFRUF DES PRODUZENTEN
synchronized void produce() throws InterruptedException {
int value = 0;
while (true) {
// PRODUCER WIRD BLOCKIERT WENN BEDINGUNG TRUE
if (list.size() == capacity) {
wait();
}
System.out.println("\033[0;31m" + "Producer produced - " + value);
// WERTE INTEGER ZUM STACK HINZUFÜGEN
list.add(value++);
// CONSUMER BENACHRICHTIGEN
notify();
// PRODUCER FÜR XY(sekunden) SCHLAFEN
Random wu = new Random();
int rand = 1 + wu.nextInt(1000);
Thread.sleep(rand);
}
}
// SYNCRONIZED METHODE ZUM AUFRUF DES KONSUMENTEN
synchronized void consume() throws InterruptedException {
while (true) {
// CONSUMER WIRD BLOCKIERT WENN BEDINGUNG TRUE
if (list.isEmpty()) {
wait();
}
// ABRUF DES STACK ELEMENTES UND ENTFERNEN DES ERSTEN ELEMENTES VOM STACK
int value = list.removeFirst();
System.out.println("\033[0;32m" + "Consumer consumed - " + value);
// DEN PRODUCER BENACHRICHTIGEN
notify();
// CONSUMER FÜR XY(sekunden) SCHLAFEN
Random wu = new Random();
int rand = 1 + wu.nextInt(1000);
Thread.sleep(rand);
}
}
Danke für eure Hilfe!
Lg TINMI