Hallo Ich bin ein Neuling in Concurrent-Programmierung mit Java. von allen Beispielen, die ich bei der gleichzeitigen Programmierung sah, wann immer wir eine Aufgabenwarteschlange definieren, verwendeten die Leute verschiedene Implementierungen der Blockierungswarteschlange. warum nur blockingqueue? Was sind die Vor- und Nachteile? Warum keine anderen Datenstrukturen?Wir können nur eine blockierende Warteschlange oder andere Datenstrukturen für die Threadpool-Aufgabenwarteschlange verwenden?
Antwort
Ok, ich kann nicht genau adressieren, warum nicht näher bezeichneter Code bestimmte Datenstrukturen verwendet und keine anderen. Aber blockierende Warteschlangen haben nette Eigenschaften. Das Halten nur einer festen Anzahl von Elementen und das Erzwingen von Erzeugern, die Elemente über dieses Limit einfügen würden, ist tatsächlich ein Merkmal.
Durch die Begrenzung der Warteschlangengröße wird die Anwendung vor einem fehlerhaften Producer geschützt, der ansonsten die Warteschlange mit Einträgen füllen könnte, bis die Anwendung nicht mehr über genügend Speicher verfügt. Offensichtlich ist es schneller, eine Aufgabe in die Aufgabe einzufügen, wenn sie ausgeführt wird. Ein Ausführender ist gefährdet, mit Arbeit bombardiert zu werden.
Wenn der Hersteller gewartet wird, wird auch ein Gegendruck auf das System angewendet. Auf diese Weise lässt die Warteschlange den Produzenten wissen, dass er zurückfällt und keine weitere Arbeit akzeptiert. Es ist besser für den Produzenten zu warten, als dafür, dass er die Warteschlange weiter hämmert; Gegendruck lässt das System elegant degradieren.
So haben Sie eine Datenstruktur, die leicht zu verstehen ist, hat praktische Vorteile für die Erstellung von Anwendungen und scheint wie eine natürliche Passform für eine Aufgabenwarteschlange. Natürlich werden die Leute es benutzen.
danke für die Antwort Nathan. Ich habe einen Überblick oder eine Idee, warum ist es so ... :) –
- 1. Android: blockierende oder nicht blockierende Warteschlange für fortlaufende SQL-Einsätze?
- 2. Ist LinkedTransferQueue blockierende oder nicht blockierende Warteschlange?
- 3. Warum brauchen wir andere Datenstrukturen als HashMap?
- 4. pthread synchronisierte blockierende Warteschlange
- 5. können wir GMDH für zwei oder drei Klassenklassifikation verwenden
- 6. Warum sollte ich nicht blockierende oder blockierende Sockets verwenden?
- 7. können wir verwenden UIImagePickerController für Landschafts iPad
- 8. Können wir BackGroundWorker-Objekte in die Warteschlange stellen
- 9. Können wir Listenansicht für heterogene Sammlungen verwenden
- 10. Würde einen Thread beenden, der auf eine blockierende Warteschlange wartet
- 11. PayPal Checkout - Können wir Geld an eine andere Person senden?
- 12. Können wir nur eine Verfügbarkeitszone für einen replizierten Cassandra-Cluster
- 13. Können wir Node.Js für die Server-Hintergrundverarbeitung verwenden?
- 14. Können wir Anwendungsdaten für die zentrale Protokollierung verwenden?
- 15. implementieren-your-own blockierende Warteschlange in Java
- 16. Können wir Simulator oder Emulator nur in Android Studio starten?
- 17. Können wir NDEBUG für Assemblydateien verwenden?
- 18. Können wir arduino.getKey() für Tastaturereignisse verwenden?
- 19. Können wir scroll-Ereignis für Div verwenden?
- 20. Können wir 2 APK für debug und andere für Test
- 21. Datenstrukturen - wann welche verwenden?
- 22. können wir Festplattenspeicher für JVM-Speicher verwenden
- 23. Können wir Kafka nur zum Einreihen in die Warteschlange verwenden, ohne auf der Festplatte zu speichern? Wenn ja, wie können wir es erreichen?
- 24. Wie können wir eine Kopie der Struktur rekursiv in eine andere Tabelle einfügen, wenn wir eine Eltern/Kind-Schlüsseltabelle verwenden?
- 25. Können wir die Ausgabe einer rekursiven Abfrage in eine andere rekursive Abfrage verwenden?
- 26. Eine zirkuläre Warteschlange durchlaufen, ohne eine temporäre Warteschlange zu verwenden
- 27. Können wir EventObject für die Kommunikation zwischen verschiedenen JVMs verwenden?
- 28. Können wir & in URL verwenden?
- 29. Können wir eine Aktualisierungsrate für SignalR einstellen?
- 30. Können wir ValidatInput (false) für nur ein Element setzen?
Weg zu weit - schlagen Sie vor, lesen Sie die ersten Kapitel eines Buches, z. Java Concurrency in der Praxis. – slim
danke für die Antwort slim..yes ist es zu weit von einer Frage .. Ich wollte nur eine Idee bekommen, warum ist es so .. :) –