Multithreading einfache WarteschlangeJava

Java-Forum
Anonymous
 Multithreading einfache Warteschlange

Post by Anonymous »

Ich übe mit Multithreading. Ich habe eine Aufgabe: < /p>
Erstellen Sie eine Nachrichtenwarteschlange, an die N -Threads schreiben (die Anzahl der Threads wird über Argumente angegeben) und N -Threads, aus denen nur das Paket java.util.concurrent gelesen wird. Die Threadnamen müssen aussagekräftig sein, wenn Konstruktionen mit Warten/Benachrichtigung verboten sind.

Code: Select all

public class MessageQueueApp {

private static final int MESSAGE_COUNT = 5;

public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Set number of threds through args");
return;
}

int threadCount;
try {
threadCount = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.err.println("Invalid format number: " + args[0]);
return;
}

BlockingQueue queue = new LinkedBlockingQueue();

ExecutorService writerPool = Executors.newFixedThreadPool(threadCount);
ExecutorService readerPool = Executors.newFixedThreadPool(threadCount);

// Writers
for (int i = 0; i < threadCount; i++) {
String writerName = "Writer-" + (i + 1);
writerPool.submit(() -> {
for (int j = 1; j  {
int received = 0;
while (received < MESSAGE_COUNT) {
try {
String message = queue.take();
System.out.println(readerName + " got: " + message);
received++;
Thread.sleep(500); //Simulation
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
}

writerPool.shutdown();
readerPool.shutdown();
}
}
< /code>
Wenn ich Protokolle öffne, sehe ich: < /p>
Reader-6 got: Writer-1 message 1
Writer-1 put: Writer-1 message 1
< /code>
Warum der Leser vor dem Schriftsteller erscheint? Bedeutet das, dass meine App nicht so funktioniert, wie sie sollte? Oder ich sollte die Leser 
und Autoren in eine Schleife platzieren? Welche Korrekturen sollte ich vornehmen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post