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!
Unerwartetes Verhalten mit 2 Enqueuching-Threads bei der Verwendung integrierter Java-ArrayBlocking-Verschlüsse und benu ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Unerwartetes Verhalten für die Korrelation von Numpy/Polars bei großen Werten
by Anonymous » » in Python - 0 Replies
- 8 Views
-
Last post by Anonymous
-