Threads Consumer-Producer

tinmi

Mitglied
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
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
 

MoxxiManagarm

Top Contributor
https://www.geeksforgeeks.org/producer-consumer-solution-using-threads-java/
Ich finde deine Lösung sieht dieser "Musterlösung" schon extrem ähnlich also eigentlich schon zu ähnlich :p. Aber, dass du uns keinen Punkt zur Diskussionsgrundlage nennst lässt vermuten, dass das dein Freund auch nicht tut. Er soll hervorheben was genau nicht passt. Wenn er das tut könnt ihr hier selbst sinnvoll argumentieren und ich denke ihr kommt dann auch auf einen Nenner. Einfach nur zu sagen die Lösung ist doof ist natürlich nicht sehr konstruktiv und hilft nicht weiter.
 

Ähnliche Java Themen

Neue Themen


Oben