Dasselbe:
1.. Linked BlockingQueue und ArrayBlockingQueue implementieren beide die Blockingqueue -Schnittstelle.
2. LinkdedBlockingQueue und ArrayBlockingQueue sind beide blockierbare Warteschlangen
Neueintritt und Zustand werden intern verwendet, um die Synchronisation von Produktion und Verbrauch zu gewährleisten.
Wenn die Warteschlange leer ist, ist der Verbraucherfaden blockiert; Wenn die Warteschlange voll ist, ist der Produzenten -Thread blockiert;
Verwenden Sie die Bedingungsmethode, um zu synchronisieren und zu kommunizieren: warte () und signifikant ().
anders:
1. Wie aus dem obigen Bild ersichtlich ist, ist ihr Verriegelungsmechanismus unterschiedlich.
Die Sperren in Linked BlockingQueue sind getrennt, der Lock -Stillschock des Produzenten und der Verbraucherschloss Takelock
ArrayBlockingQueue -Hersteller und Verbraucher verwenden das gleiche Schloss.
2. Ihr zugrunde liegender Implementierungsmechanismus ist ebenfalls unterschiedlich
Linked BlockingQueue hält intern eine verknüpfte Listenstruktur beibehalten
Während der Produktion und des Verbrauchs müssen Knotenobjekte zum Einfügen oder Entfernen erstellt werden. In Systemen mit großen Datenanschlüssen wird der Druck auf GC größer.
ArrayBlockingQueue behält intern ein Array bei
Während der Produktion und des Verbrauchs werden Aufzählungsobjekte direkt eingefügt oder entfernt, und es werden keine zusätzlichen Objektinstanzen erzeugt oder zerstört.
3.. Unterschiede in der Konstruktion
LinkedBlockingQueue hat eine Standardkapazitätsgröße: Integer.max_Value, natürlich können Sie auch die angegebene Kapazitätsgröße übergeben.
Beim Initialisieren von ArrayBlockingqueue muss ein Kapazitätswert übergeben werden.
Sie können es wissen, indem Sie sich die von ihr bereitgestellte Baumethode ansehen
4. Führen Sie die Methode clear () aus
Wenn LinkedBlockingQueue die klare Methode ausführt, werden zwei Schlösser hinzugefügt.
5. Statistik Die Anzahl der Elemente
Ein Atomicinteger -Objekt wird in Linked BlockingQueue verwendet, um die Anzahl der Elemente zu zählen
ArrayBlockingQueue verwendet den INT -Typ, um Elemente zu zählen