Bagikan melalui


Selector Kelas

Definisi

Multipleksor SelectableChannel objek.

[Android.Runtime.Register("java/nio/channels/Selector", DoNotGenerateAcw=true)]
public abstract class Selector : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ICloseable
[<Android.Runtime.Register("java/nio/channels/Selector", DoNotGenerateAcw=true)>]
type Selector = class
    inherit Object
    interface ICloseable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Warisan
Selector
Turunan
Atribut
Penerapan

Keterangan

Multipleksor SelectableChannel objek.

Pemilih dapat dibuat dengan memanggil #open open metode kelas ini, yang akan menggunakan default java.nio.channels.spi.SelectorProvider selector provider sistem untuk membuat pemilih baru. Pemilih juga dapat dibuat dengan memanggil java.nio.channels.spi.SelectorProvider#openSelector openSelector metode penyedia pemilih kustom. Pemilih tetap terbuka sampai ditutup melalui metodenya #close close .

"ks">

Pendaftaran saluran yang dapat dipilih dengan pemilih diwakili oleh SelectionKey objek. Pemilih mempertahankan tiga set kunci pilihan:

<Ul>

<Li>

Set kunci berisi kunci yang mewakili pendaftaran saluran saat ini dari pemilih ini. Set ini dikembalikan oleh #keys() keys metode .

</Li>

<Li>

Set kunci yang dipilih adalah sekumpulan kunci sehingga setiap saluran kunci terdeteksi siap untuk setidaknya salah satu operasi yang diidentifikasi dalam rangkaian minat kunci selama operasi pemilihan sebelumnya yang menambahkan kunci atau memperbarui kunci dalam set. Set ini dikembalikan oleh #selectedKeys() selectedKeys metode . Set kunci yang dipilih selalu merupakan subset dari set kunci.

</Li>

<Li>

Set kunci yang dibatalkan adalah sekumpulan kunci yang telah dibatalkan tetapi salurannya belum dibatalkan pendaftarannya. Set ini tidak dapat diakses secara langsung. Set kunci yang dibatalkan selalu merupakan subset dari set kunci.

</Li>

</Ul>

Ketiga set kosong dalam pemilih yang baru dibuat.

Kunci ditambahkan ke set kunci pemilih sebagai efek samping mendaftarkan saluran melalui metode saluran SelectableChannel#register(Selector,int) register . Kunci yang dibatalkan dihapus dari set kunci selama operasi pemilihan. Set kunci itu sendiri tidak dapat dimodifikasi secara langsung.

Kunci ditambahkan ke set kunci yang dibatalkan pemilihnya saat dibatalkan, baik dengan menutup salurannya atau dengan memanggil metodenya SelectionKey#cancel cancel . Membatalkan kunci akan menyebabkan salurannya dibatalkan pendaftarannya selama operasi pemilihan berikutnya, pada saat itu kunci akan dihapus dari semua set kunci pemilih.

"sks">

Kunci ditambahkan ke set kunci yang dipilih menurut operasi pemilihan. Kunci dapat dihapus langsung dari set kunci yang dipilih dengan memanggil metode set java.util.Set#remove(java.lang.Object) remove atau dengan memanggil java.util.Iterator#remove() remove metode yang java.util.Iterator iterator diperoleh dari set. Semua kunci dapat dihapus dari set kunci yang dipilih dengan memanggil metode set java.util.Set#clear() clear . Kunci mungkin tidak ditambahkan langsung ke set kunci yang dipilih.

"selop"><h2>Selection</h2>

Operasi pemilihan meminta sistem operasi yang mendasari pembaruan tentang kesiapan setiap saluran terdaftar untuk melakukan salah satu operasi yang diidentifikasi oleh set minat utamanya. Ada dua bentuk operasi pemilihan:

<Ol>

<Li>

Metode #select(), #select(long), dan #selectNow() menambahkan kunci saluran yang siap untuk melakukan operasi ke set kunci yang dipilih, atau memperbarui set kunci siap operasi yang sudah ada di set kunci yang dipilih.

</Li>

<Li>

Metode #select(Consumer), #select(Consumer, long), dan #selectNow(Consumer) melakukan tindakan pada kunci setiap saluran yang siap untuk melakukan operasi. Metode ini tidak ditambahkan ke set kunci yang dipilih.

</Li>

</Ol>

<h3>Operasi pemilihan yang ditambahkan ke set< kunci yang dipilih/h3>

Selama setiap operasi pemilihan, kunci dapat ditambahkan ke dan dihapus dari set kunci yang dipilih pemilih dan dapat dihapus dari kuncinya dan set kunci yang dibatalkan. Pemilihan dilakukan oleh #select()metode , #select(long), dan #selectNow() , dan melibatkan tiga langkah:

<Ol>

<Li>

Setiap kunci dalam set kunci yang dibatalkan dihapus dari setiap set kunci yang merupakan anggotanya, dan salurannya dibatalkan pendaftarannya. Langkah ini membuat set kunci yang dibatalkan kosong.

</Li>

<Li>

Sistem operasi yang mendasar dikueri untuk pembaruan tentang kesiapan setiap saluran yang tersisa untuk melakukan salah satu operasi yang diidentifikasi oleh kepentingan utamanya yang ditetapkan pada saat operasi pemilihan dimulai. Untuk saluran yang siap untuk setidaknya satu operasi tersebut, salah satu dari dua tindakan berikut dilakukan:

<Ol>

<Li>

Jika kunci saluran belum berada dalam set kunci yang dipilih, kunci tersebut ditambahkan ke set tersebut dan set operasi siap dimodifikasi untuk mengidentifikasi persis operasi yang salurannya sekarang dilaporkan siap. Informasi kesiapan apa pun yang sebelumnya dicatat dalam set siap dibuang.

</Li>

<Li>

Jika tidak, kunci saluran sudah berada dalam set kunci yang dipilih, sehingga set operasi siap dimodifikasi untuk mengidentifikasi operasi baru yang salurannya dilaporkan siap. Setiap informasi kesiapan yang sebelumnya dicatat dalam set siap dipertahankan; dengan kata lain, set siap yang dikembalikan oleh sistem yang mendasar adalah bitwise-disjoined ke dalam set siap kunci saat ini.

</Li>

</Ol>

Jika semua kunci dalam set kunci pada awal langkah ini memiliki set minat kosong, set kunci yang dipilih maupun set siap operasi kunci tidak akan diperbarui.

<Li>

Jika ada kunci yang ditambahkan ke set kunci yang dibatalkan saat langkah (2) sedang berlangsung, kunci tersebut akan diproses seperti pada langkah (1).

</Li>

</Ol>

Apakah operasi pemilihan memblokir untuk menunggu satu atau beberapa saluran menjadi siap, dan jika demikian untuk berapa lama, adalah satu-satunya perbedaan penting antara tiga metode pilihan.

<h3>Operasi pemilihan yang melakukan tindakan pada kunci</h3 yang dipilih>

Selama setiap operasi pemilihan, kunci dapat dihapus dari kunci pemilih, kunci yang dipilih, dan set kunci yang dibatalkan. Pemilihan dilakukan oleh #select(Consumer)metode , #select(Consumer,long), dan #selectNow(Consumer) , dan melibatkan tiga langkah:

<Ol>

<Li>

Setiap kunci dalam set kunci yang dibatalkan dihapus dari setiap set kunci yang merupakan anggotanya, dan salurannya dibatalkan pendaftarannya. Langkah ini membuat set kunci yang dibatalkan kosong.

</Li>

<Li>

Sistem operasi yang mendasar dikueri untuk pembaruan tentang kesiapan setiap saluran yang tersisa untuk melakukan salah satu operasi yang diidentifikasi oleh kepentingan utamanya yang ditetapkan pada saat operasi pemilihan dimulai.

Untuk saluran yang siap untuk setidaknya satu operasi tersebut, set operasi siap dari kunci saluran diatur untuk mengidentifikasi operasi yang tepat yang salurannya siap dan tindakan yang ditentukan ke select metode dipanggil untuk menggunakan kunci saluran. Informasi kesiapan apa pun yang sebelumnya direkam dalam set siap dibuang sebelum memanggil tindakan.

Atau, di mana saluran siap untuk lebih dari satu operasi, tindakan dapat dipanggil lebih dari sekali dengan kunci saluran dan set siap operasi dimodifikasi ke subset operasi tempat saluran siap. Di mana tindakan dipanggil lebih dari sekali untuk kunci yang sama maka set operasi siap tidak pernah berisi bit operasi yang terkandung dalam set pada panggilan sebelumnya ke tindakan dalam operasi pemilihan yang sama.

</Li>

<Li>

Jika ada kunci yang ditambahkan ke set kunci yang dibatalkan saat langkah (2) sedang berlangsung, kunci tersebut akan diproses seperti pada langkah (1).

</Li>

</Ol>

<h2>Konkurensi</h2>

Pemilih dan set kuncinya aman untuk digunakan oleh beberapa utas bersamaan. Namun, set kunci yang dipilih dan set kunci yang dibatalkan tidak.

Operasi pemilihan disinkronkan pada pemilih itu sendiri, pada set kunci yang dipilih, dalam urutan tersebut. Mereka juga menyinkronkan pada set kunci yang dibatalkan selama langkah -langkah (1) dan (3) di atas.

Perubahan yang dilakukan pada set minat kunci pemilih saat operasi pemilihan sedang berlangsung tidak berpengaruh pada operasi tersebut; mereka akan dilihat oleh operasi pemilihan berikutnya.

Kunci dapat dibatalkan dan saluran dapat ditutup kapan saja. Oleh karena itu, keberadaan kunci dalam satu atau beberapa set kunci pemilih tidak menyiratkan bahwa kunci valid atau bahwa salurannya terbuka. Kode aplikasi harus berhati-hati untuk menyinkronkan dan memeriksa kondisi ini seperlunya jika ada kemungkinan bahwa utas lain akan membatalkan kunci atau menutup saluran.

Utas yang diblokir dalam operasi pemilihan mungkin terganggu oleh beberapa utas lain dengan salah satu dari tiga cara:

<Ul>

<Li>

Dengan memanggil metode pemilih #wakeup wakeup ,

</Li>

<Li>

Dengan memanggil metode pemilih #close close , atau

</Li>

<Li>

Dengan memanggil metode utas java.lang.Thread#interrupt() interrupt yang diblokir, dalam hal ini status interupsinya akan diatur dan metode pemilih #wakeup wakeup akan dipanggil.

</Li>

</Ul>

Metode #close close disinkronkan pada pemilih dan set kunci yang dipilih dalam urutan yang sama seperti dalam operasi pemilihan.

"ksc">

Set kunci Pemilih aman untuk digunakan oleh beberapa utas bersamaan. Operasi pengambilan dari set kunci umumnya tidak memblokir dan mungkin tumpang tindih dengan pendaftaran baru yang ditambahkan ke set, atau dengan langkah-langkah pembatalan operasi pemilihan yang menghapus kunci dari set. Iterator dan pemisah mengembalikan elemen yang mencerminkan status set pada beberapa titik pada atau sejak pembuatan iterator/pemisah. Mereka tidak melemparkan java.util.ConcurrentModificationException ConcurrentModificationException.

"sksc">

Set kunci yang dipilih pemilih tidak, secara umum, aman untuk digunakan oleh beberapa utas bersamaan. Jika utas seperti itu dapat memodifikasi set secara langsung, maka akses harus dikontrol dengan menyinkronkan pada set itu sendiri. Iterator yang dikembalikan oleh metode set java.util.Set#iterator() iterator gagal cepat: Jika set dimodifikasi setelah iterator dibuat, dengan cara apa pun kecuali dengan memanggil metode iterator sendirijava.util.Iterator#remove() remove, maka java.util.ConcurrentModificationException akan dilemparkan.

Ditambahkan dalam 1.4.

Dokumentasi Java untuk java.nio.channels.Selector.

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.

Konstruktor

Selector()

Menginisialisasi instans baru kelas ini.

Selector(IntPtr, JniHandleOwnership)

Konstruktor yang digunakan saat membuat representasi terkelola objek JNI; dipanggil oleh runtime.

Properti

Class

Mengembalikan kelas runtime dari .Object

(Diperoleh dari Object)
Handle

Handel ke instans Android yang mendasar.

(Diperoleh dari Object)
IsOpen

Menunjukkan apakah pemilih ini terbuka.

JniIdentityHashCode

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
JniPeerMembers

Multipleksor SelectableChannel objek.

PeerReference

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
ThresholdClass

API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda.

ThresholdType

API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda.

Metode

Clone()

Membuat dan mengembalikan salinan objek ini.

(Diperoleh dari Object)
Close()

Menutup pemilih ini.

Dispose()

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
Dispose(Boolean)

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
Equals(Object)

Menunjukkan apakah beberapa objek lain "sama dengan" yang satu ini.

(Diperoleh dari Object)
GetHashCode()

Mengembalikan nilai kode hash untuk objek .

(Diperoleh dari Object)
JavaFinalize()

Dipanggil oleh pengumpul sampah pada objek ketika pengumpulan sampah menentukan bahwa tidak ada lagi referensi ke objek.

(Diperoleh dari Object)
Keys()

Mengembalikan set kunci pemilih ini.

Notify()

Membangunkan satu utas yang menunggu monitor objek ini.

(Diperoleh dari Object)
NotifyAll()

Membangunkan semua utas yang menunggu monitor objek ini.

(Diperoleh dari Object)
Open()

Membuka pemilih.

Provider()

Mengembalikan penyedia yang membuat saluran ini.

Select()

Memilih sekumpulan kunci yang saluran terkaitnya siap untuk operasi I/O.

Select(IConsumer, Int64)

Memilih dan melakukan tindakan pada kunci yang saluran terkaitnya siap untuk operasi I/O.

Select(IConsumer)

Memilih dan melakukan tindakan pada kunci yang saluran terkaitnya siap untuk operasi I/O.

Select(Int64)

Memilih sekumpulan kunci yang saluran terkaitnya siap untuk operasi I/O.

SelectedKeys()

Mengembalikan set kunci terpilih pemilih ini.

SelectNow()

Memilih sekumpulan kunci yang saluran terkaitnya siap untuk operasi I/O.

SelectNow(IConsumer)

Memilih dan melakukan tindakan pada kunci yang saluran terkaitnya siap untuk operasi I/O.

SetHandle(IntPtr, JniHandleOwnership)

Handle Mengatur properti.

(Diperoleh dari Object)
ToArray<T>()

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
ToString()

Mengembalikan representasi string objek.

(Diperoleh dari Object)
UnregisterFromRuntime()

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
Wait()

Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <diberitahu></em> atau <em>terganggu</em>.

(Diperoleh dari Object)
Wait(Int64, Int32)

Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah real time telah berlalu.

(Diperoleh dari Object)
Wait(Int64)

Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah real time telah berlalu.

(Diperoleh dari Object)
Wakeup()

Menyebabkan operasi pemilihan pertama yang belum kembali segera kembali.

Implementasi Antarmuka Eksplisit

IJavaPeerable.Disposed()

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
IJavaPeerable.DisposeUnlessReferenced()

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
IJavaPeerable.Finalized()

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
IJavaPeerable.JniManagedPeerState

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Multipleksor SelectableChannel objek.

(Diperoleh dari Object)

Metode Ekstensi

JavaCast<TResult>(IJavaObject)

Melakukan konversi jenis yang diperiksa runtime Bahasa Umum Android.

JavaCast<TResult>(IJavaObject)

Multipleksor SelectableChannel objek.

GetJniTypeName(IJavaPeerable)

Multipleksor SelectableChannel objek.

Berlaku untuk