Unerwartetes Verhalten mit 2 Enqueuching-Threads bei der Verwendung integrierter Java-ArrayBlocking-Verschlüsse und benuJava

Java-Forum
Anonymous
 Unerwartetes Verhalten mit 2 Enqueuching-Threads bei der Verwendung integrierter Java-ArrayBlocking-Verschlüsse und benu

Post by Anonymous »

Hallo, können Sie mir bitte helfen, ein unerwartetes Verhalten mit 2 Enqueuer-Threads zu verstehen, wenn Sie integriertes Java-ArrayBlocking-Verfahren und benutzerdefinierte Implementierung verwenden? Deques in der sequentiellen Reihenfolge, die die in den Werten verwendeten Threads, aber dies ist nicht der Fall. < /p>
Dies ist der Code: < /p>
public class MultiThreadTests {
private static final int QUEUE_LENGTH = 100_000;

public static void main(String[] args) throws InterruptedException {
usingTwoThreadsAndArrayBlockingQueue();

}

private static void usingTwoThreadsAndArrayBlockingQueue() throws InterruptedException {
ArrayBlockingQueue q = new ArrayBlockingQueue(QUEUE_LENGTH);

ArrayBlockingQueueClientThread t1 = new ArrayBlockingQueueClientThread(q, 1);
ArrayBlockingQueueClientThread t2 = new ArrayBlockingQueueClientThread(q, 2000);

t1.start();
t2.start();

}

static class ArrayBlockingQueueClientThread extends Thread {
ArrayBlockingQueue q;
int m;

ArrayBlockingQueueClientThread(ArrayBlockingQueue ephemeralQueue, int m) {
this.q = ephemeralQueue;
this.m = m;
}

public void run() {
for (int i = 0; i < 20 ; i++) {
q.add(i * m);
}

// I should still see the correct order when I dequeue concurrently, but I do not.
int k = 0;
while(k
Dies ist die Ausgabe (es ist jedoch nicht konsistent): < /p>
1
2
3
4 t
14
16
17
18
19
0
2000
4000
15
8000 t
30000
20000
34000
36000
32000
38000 < /P>
Sie sehen, sodass einige Werte nicht mehr ausgehen Bestellen Sie auf Thread -Ebene, wie dem Wert 15 und dem Wert 6000. Und ich verstehe nicht, warum dies der Fall ist. Danke!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post