sama:
1. LinkedBlockingQueue dan ArrayBlockingQueue keduanya menerapkan antarmuka blockingqueue;
2. LinkedBlockingQueue dan ArrayBlockingQueue keduanya antrian yang dapat diblokir
Reentrantlock dan kondisi digunakan secara internal untuk memastikan sinkronisasi produksi dan konsumsi;
Ketika antrian kosong, utas konsumen diblokir; Ketika antrian penuh, utas produser diblokir;
Gunakan metode kondisi untuk menyinkronkan dan berkomunikasi: menunggu () dan sinyal ()
berbeda:
1. Seperti yang dapat dilihat dari gambar di atas, mekanisme pengunciannya berbeda.
Kunci di LinkedBlockingQueue dipisahkan, putlock kunci produsen, dan Takelock kunci konsumen
Produsen dan konsumen arrayblockingqueue menggunakan kunci yang sama;
2. Mekanisme implementasi yang mendasarinya juga berbeda
LinkedBlockingQueue mempertahankan struktur daftar tertaut secara internal
Selama produksi dan konsumsi, objek node perlu dibuat untuk penyisipan atau penghapusan. Dalam sistem dengan banyak data, tekanan pada GC akan lebih besar.
Arrayblockingqueue mempertahankan array secara internal
Selama produksi dan konsumsi, objek enumerasi secara langsung dimasukkan atau dihapus, dan tidak ada instance objek tambahan yang dihasilkan atau dihancurkan.
3. Perbedaan dalam konstruksi
LinkedBlockingQueue memiliki ukuran kapasitas default: integer.max_value, tentu saja, Anda juga dapat lulus dalam ukuran kapasitas yang ditentukan.
Saat menginisialisasi arrayblockingqueue, nilai kapasitas harus dilewati.
Anda dapat tahu dengan melihat metode konstruksi yang disediakan olehnya
4. Jalankan metode clear ()
Ketika LinkedBlockingQueue menjalankan metode yang jelas, dua kunci akan ditambahkan.
5. Statistik Jumlah elemen
Objek Atomicinteger digunakan dalam LinkedBlockingQueue untuk menghitung jumlah elemen
ArrayBlockingQueue menggunakan tipe int untuk menghitung elemen