IBlockingQueue Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Queue
Yang juga mendukung operasi yang menunggu antrean menjadi tidak kosong saat mengambil elemen, dan menunggu ruang tersedia dalam antrean saat menyimpan elemen.
[Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public interface IBlockingQueue : IDisposable, Java.Interop.IJavaPeerable, Java.Util.IQueue
[<Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
type IBlockingQueue = interface
interface IQueue
interface ICollection
interface IIterable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Turunan
- Atribut
- Penerapan
Keterangan
Queue
Yang juga mendukung operasi yang menunggu antrean menjadi tidak kosong saat mengambil elemen, dan menunggu ruang tersedia dalam antrean saat menyimpan elemen.
BlockingQueue
metode datang dalam empat bentuk, dengan berbagai cara penanganan operasi yang tidak dapat segera dipenuhi, tetapi mungkin terpenuhi pada beberapa titik di masa depan: satu melempar pengecualian, yang kedua mengembalikan nilai khusus (baik null
atau false
, tergantung pada operasi), yang ketiga memblokir utas saat ini tanpa batas waktu sampai operasi dapat berhasil, dan blok keempat hanya untuk batas waktu maksimum tertentu sebelum menyerah. Metode ini dirangkum dalam tabel berikut:
<table class="plain"><caption>Summary of BlockingQueue methods</caption><tr><td></td><th scope="col" style="font-weight:normal; font-style:italic">Melempar pengecualian</th th<>scope="col" style="font-weight:normal; font-style:italic">Special value</th th<>scope="col" style="font-weight:normal; font-style:italic">Blocks</th><th scope="col" style="font-weight:normal; font-style:italic">Times out</th<>/tr tr<><>th scope="row" style="text-align:left">Insert</th><td><#add(Object) add(e)
/td><<>#offer(Object) offer(e)
/td td>><<#put(Object) put(e)
/td><><#offer(Object, long, TimeUnit) offer(e, time, unit)
/td<>/tr tr<<>>th scope="row" style="text-align:left">Remove</th><td#remove() remove()
></td<><>#poll() poll()
/td/td><td><#take() take()
/td><td><#poll(long, TimeUnit) poll(time, unit)
/td></tr tr>><<th scope="row" style="text-align:left">Examine</th><td<#element() element()
>/td><td#peek() peek()
<>/td td><style="font-style: italic">not applicable</td td><style="font-style: italic">not applicable</td<>/table><>
BlockingQueue
Tidak menerima null
elemen. Implementasi melempar NullPointerException
pada upaya ke add
, put
atau offer
null
. null
digunakan sebagai nilai sentinel untuk menunjukkan kegagalan poll
operasi.
BlockingQueue
Mungkin kapasitas terikat. Pada waktu tertentu mungkin memiliki remainingCapacity
di luar yang tidak ada elemen tambahan yang dapat put
tanpa memblokir. Tanpa BlockingQueue
batasan kapasitas intrinsik selalu melaporkan kapasitas yang tersisa dari Integer.MAX_VALUE
.
BlockingQueue
implementasi dirancang untuk digunakan terutama untuk antrean produsen-konsumen, tetapi juga mendukung Collection
antarmuka. Jadi, misalnya, dimungkinkan untuk menghapus elemen arbitrer dari antrean menggunakan remove(x)
. Namun, operasi tersebut umumnya <>tidak< dilakukan> dengan sangat efisien, dan hanya ditujukan untuk penggunaan sesekali, seperti ketika pesan antrean dibatalkan.
BlockingQueue
implementasi aman utas. Semua metode antrean mencapai efeknya secara atomik menggunakan kunci internal atau bentuk kontrol konkurensi lainnya. Namun, <operasi Pengumpulan massal</em> , , containsAll
retainAll
dan removeAll
apakah <mereka>tidak</em> selalu dilakukan secara atomik kecuali ditentukan sebaliknya dalam implementasi.addAll
> Jadi dimungkinkan, misalnya, untuk addAll(c)
gagal (melempar pengecualian) setelah menambahkan hanya beberapa elemen di c
.
BlockingQueue
Apakah <mereka>tidak</em> secara intrinsik mendukung segala jenis " tutup & atau " shutdown" operasi untuk menunjukkan bahwa tidak ada lagi item yang akan ditambahkan. Kebutuhan dan penggunaan fitur tersebut cenderung bergantung pada implementasi. Misalnya, taktik umum adalah bagi produsen untuk memasukkan objek khusus <em>end-of-stream</em> atau <em>poison</em> , yang ditafsirkan sesuai ketika diambil oleh konsumen.
Contoh penggunaan, berdasarkan skenario produsen-konsumen yang khas. Perhatikan bahwa BlockingQueue
dapat digunakan dengan aman dengan beberapa produsen dan beberapa konsumen.
{@code
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
}
class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}}
Efek konsistensi memori: Seperti halnya koleksi bersamaan lainnya, tindakan dalam utas sebelum menempatkan objek ke dalam BlockingQueue
<tindakan i>happen-before</i> selanjutnya ke akses atau penghapusan elemen tersebut BlockingQueue
dari di utas lain.
Antarmuka ini adalah anggota Java Collections Framework.
Ditambahkan dalam 1.5.
Dokumentasi Java untuk java.util.concurrent.BlockingQueue
.
Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.
Properti
Handle |
Mendapatkan nilai JNI dari objek Android yang mendasar. (Diperoleh dari IJavaObject) |
IsEmpty |
Mengembalikan jika ini |
JniIdentityHashCode |
Mengembalikan nilai |
JniManagedPeerState |
Status serekan terkelola. (Diperoleh dari IJavaPeerable) |
JniPeerMembers |
Akses anggota dan dukungan pemanggilan. (Diperoleh dari IJavaPeerable) |
PeerReference |
Mengembalikan instans objek Java yang dibungkus JniObjectReference . (Diperoleh dari IJavaPeerable) |
Metode
Add(Object) |
Menyisipkan elemen yang ditentukan ke dalam antrean ini jika memungkinkan untuk melakukannya segera tanpa melanggar batasan kapasitas, kembali |
AddAll(ICollection) |
Menambahkan semua elemen dalam koleksi yang ditentukan ke koleksi ini (operasi opsional). (Diperoleh dari ICollection) |
Clear() |
Menghapus semua elemen dari koleksi ini (operasi opsional). (Diperoleh dari ICollection) |
Contains(Object) |
Mengembalikan |
ContainsAll(ICollection) |
Mengembalikan |
Disposed() |
Dipanggil ketika instans telah dibuang. (Diperoleh dari IJavaPeerable) |
DisposeUnlessReferenced() |
Jika tidak ada referensi yang luar biasa untuk instans ini, maka panggilan |
DrainTo(ICollection) |
Menghapus semua elemen yang tersedia dari antrean ini dan menambahkannya ke koleksi yang diberikan. |
DrainTo(ICollection, Int32) |
Menghapus paling banyak jumlah elemen yang tersedia dari antrean ini dan menambahkannya ke koleksi yang diberikan. |
Element() |
Mengambil, tetapi tidak menghapus, kepala antrean ini. (Diperoleh dari IQueue) |
Equals(Object) |
Membandingkan objek yang ditentukan dengan koleksi ini untuk kesetaraan. (Diperoleh dari ICollection) |
Finalized() |
Dipanggil ketika instans telah diselesaikan. (Diperoleh dari IJavaPeerable) |
ForEach(IConsumer) |
Melakukan tindakan yang diberikan untuk setiap elemen |
GetHashCode() |
Mengembalikan nilai kode hash untuk koleksi ini. (Diperoleh dari ICollection) |
Iterator() |
Mengembalikan iterator di atas elemen dalam koleksi ini. (Diperoleh dari ICollection) |
Offer(Object) |
Menyisipkan elemen yang ditentukan ke dalam antrean ini jika memungkinkan untuk melakukannya segera tanpa melanggar batasan kapasitas, kembali |
Offer(Object, Int64, TimeUnit) |
Menyisipkan elemen yang ditentukan ke dalam antrean ini, menunggu hingga waktu tunggu yang ditentukan jika perlu ruang tersedia. |
Peek() |
Mengambil, tetapi tidak menghapus, kepala antrean ini, atau mengembalikan |
Poll() |
Mengambil dan menghapus kepala antrean ini, atau mengembalikan |
Poll(Int64, TimeUnit) |
Mengambil dan menghapus kepala antrean ini, menunggu hingga waktu tunggu yang ditentukan jika perlu elemen tersedia. |
Put(Object) |
Menyisipkan elemen yang ditentukan ke dalam antrean ini, menunggu jika perlu ruang tersedia. |
RemainingCapacity() |
Mengembalikan jumlah elemen tambahan yang idealnya dapat diterima oleh antrean ini (tanpa batasan memori atau sumber daya) tanpa pemblokiran, atau |
Remove() |
Mengambil dan menghapus kepala antrean ini. (Diperoleh dari IQueue) |
Remove(Object) |
Menghapus satu instans elemen yang ditentukan dari antrean ini, jika ada. |
RemoveAll(ICollection) |
Menghapus semua elemen koleksi ini yang juga terkandung dalam koleksi yang ditentukan (operasi opsional). (Diperoleh dari ICollection) |
RemoveIf(IPredicate) |
Menghapus semua elemen koleksi ini yang memenuhi predikat yang diberikan. (Diperoleh dari ICollection) |
RetainAll(ICollection) |
Hanya mempertahankan elemen dalam koleksi ini yang terkandung dalam koleksi yang ditentukan (operasi opsional). (Diperoleh dari ICollection) |
SetJniIdentityHashCode(Int32) |
Atur nilai yang dikembalikan oleh |
SetJniManagedPeerState(JniManagedPeerStates) |
|
SetPeerReference(JniObjectReference) |
Atur nilai yang dikembalikan oleh |
Size() |
Mengembalikan jumlah elemen dalam koleksi ini. (Diperoleh dari ICollection) |
Spliterator() |
Membuat lebih dari elemen yang |
Take() |
Mengambil dan menghapus kepala antrean ini, menunggu jika perlu sampai elemen tersedia. |
ToArray() |
Mengembalikan array yang berisi semua elemen dalam koleksi ini. (Diperoleh dari ICollection) |
ToArray(IIntFunction) |
Mengembalikan array yang berisi semua elemen dalam koleksi ini, menggunakan fungsi yang disediakan |
ToArray(Object[]) |
Mengembalikan array yang berisi semua elemen dalam koleksi ini; jenis runtime array yang dikembalikan adalah array yang ditentukan. (Diperoleh dari ICollection) |
UnregisterFromRuntime() |
Batalkan pendaftaran instans ini sehingga runtime tidak akan mengembalikannya dari pemanggilan di masa mendatang Java.Interop.JniRuntime+JniValueManager.PeekValue . (Diperoleh dari IJavaPeerable) |
Implementasi Antarmuka Eksplisit
IIterable.Spliterator() |
|
Metode Ekstensi
JavaCast<TResult>(IJavaObject) |
Melakukan konversi jenis yang diperiksa runtime Bahasa Umum Android. |
JavaCast<TResult>(IJavaObject) |
|
GetJniTypeName(IJavaPeerable) |
|
OfferAsync(IBlockingQueue, Object) |
|
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
|
PollAsync(IBlockingQueue, Int64, TimeUnit) |
|
PutAsync(IBlockingQueue, Object) |
|
TakeAsync(IBlockingQueue) |
|
ToEnumerable(IIterable) |
|
ToEnumerable<T>(IIterable) |
|