ForkJoinPool Kelas
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.
Untuk ExecutorService menjalankan ForkJoinTasks.
[Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)]
public class ForkJoinPool : Java.Util.Concurrent.AbstractExecutorService
[<Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)>]
type ForkJoinPool = class
inherit AbstractExecutorService
- Warisan
- Atribut
Keterangan
Untuk ExecutorService menjalankan ForkJoinTasks. A ForkJoinPool menyediakan titik masuk untuk pengiriman dari non-klienForkJoinTask , serta operasi manajemen dan pemantauan.
Berbeda ForkJoinPool dari jenis ExecutorService lain terutama karena mempekerjakan <mereka>mencuri pekerjaan< /em>: semua utas di kumpulan mencoba menemukan dan menjalankan tugas yang dikirimkan ke kumpulan dan/atau dibuat oleh tugas aktif lainnya (akhirnya memblokir menunggu pekerjaan jika tidak ada). Ini memungkinkan pemrosesan yang efisien ketika sebagian besar tugas menelurkan subtugas lain (seperti halnya sebagian besar ForkJoinTask), serta ketika banyak tugas kecil dikirimkan ke kumpulan dari klien eksternal. Terutama ketika mengatur <em>asyncMode</em> ke true dalam konstruktor, ForkJoinPools mungkin juga sesuai untuk digunakan dengan tugas gaya peristiwa yang tidak pernah bergabung. Semua utas pekerja diinisialisasi dengan Thread#isDaemon set true.
Statis #commonPool() tersedia dan sesuai untuk sebagian besar aplikasi. Kumpulan umum digunakan oleh ForkJoinTask apa pun yang tidak dikirimkan secara eksplisit ke kumpulan tertentu. Menggunakan kumpulan umum biasanya mengurangi penggunaan sumber daya (utasnya perlahan-lahan direklamasi selama periode tidak digunakan, dan dipulihkan setelah penggunaan berikutnya).
Untuk aplikasi yang memerlukan kumpulan terpisah atau kustom, dapat dibangun dengan tingkat paralelisme target tertentu; secara default, sama dengan jumlah prosesor yang ForkJoinPool tersedia. Kumpulan mencoba mempertahankan utas yang cukup aktif (atau tersedia) dengan menambahkan, menangguhkan, atau melanjutkan utas pekerja internal secara dinamis, bahkan jika beberapa tugas terhenti menunggu untuk bergabung dengan orang lain. Namun, tidak ada penyesuaian seperti itu yang dijamin dalam menghadapi I/O yang diblokir atau sinkronisasi tidak terkelola lainnya. Antarmuka berlapis ManagedBlocker memungkinkan ekstensi jenis sinkronisasi yang diakomodasi. Kebijakan default dapat ditimpa menggunakan konstruktor dengan parameter yang sesuai dengan yang didokumenkan di kelas ThreadPoolExecutor.
Selain metode eksekusi dan kontrol siklus hidup, kelas ini menyediakan metode pemeriksaan status (misalnya #getStealCount) yang dimaksudkan untuk membantu dalam mengembangkan, menyetel, dan memantau aplikasi fork/join. Selain itu, metode #toString mengembalikan indikasi status kumpulan dalam bentuk yang nyaman untuk pemantauan informal.
Seperti halnya dengan ExecutorServices lainnya, ada tiga metode eksekusi tugas utama yang dirangkum dalam tabel berikut. Ini dirancang untuk digunakan terutama oleh klien yang belum terlibat dalam komputasi fork/gabungan di kumpulan saat ini. Bentuk utama metode ini menerima instans ForkJoinTask, tetapi bentuk yang kelebihan beban juga memungkinkan eksekusi campuran aktivitas berbasis biasa Runnable- atau Callable- juga. Namun, tugas yang sudah dijalankan dalam kumpulan biasanya harus menggunakan formulir komputasi dalam yang tercantum dalam tabel kecuali menggunakan tugas gaya peristiwa asinkron yang biasanya tidak digabungkan, dalam hal ini ada sedikit perbedaan di antara pilihan metode.
<table class="plain">caption>Summary of task execution methods</caption><tr><td></td><th scope="col"> Call from non-fork/join clients</th<>scope="col"> Panggilan dari dalam fork/join computations</th<>/tr tr>><<th scope="row" style="text-align:left"> Arrange async execution</th<>td#execute(ForkJoinTask)<>/td td<><>ForkJoinTask#fork/td><</Tr><tr><th scope="row" style="text-align:left"> Await and get result</th><td>#invoke(ForkJoinTask)</td<<ForkJoinTask#invoke>>/td<>/tr tr><<>th scope="row" style="text-align:left"> Arrange exec and get Future</th><td<#submit(ForkJoinTask)>/td td><ForkJoinTask#fork> (ForkJoinTasks <em>are</em> Futures)</td<>/tr></table>
Parameter yang digunakan untuk membangun kumpulan umum dapat dikontrol dengan mengatur properti sistem System#getProperty berikut: <ul><li>java.util.concurrent.ForkJoinPool.common.parallelism - tingkat paralelisme, li bilangan bulat><java.util.concurrent.ForkJoinPool.common.threadFactory non-negatif - nama kelas .ForkJoinWorkerThreadFactory Loader kelas sistem ClassLoader#getSystemClassLoader() digunakan untuk memuat kelas ini. <li>java.util.concurrent.ForkJoinPool.common.exceptionHandler - nama kelas dari UncaughtExceptionHandler. Loader kelas sistem ClassLoader#getSystemClassLoader() digunakan untuk memuat kelas ini. <li>java.util.concurrent.ForkJoinPool.common.maximumSpares - jumlah maksimum utas tambahan yang diizinkan untuk mempertahankan paralelisme target (default 256). </ul> Jika tidak ada pabrik utas yang disediakan melalui properti sistem, maka kumpulan umum menggunakan pabrik yang menggunakan loader kelas sistem sebagai loader kelas thread#getContextClassLoader(). Selain itu, jika SecurityManager ada, maka kumpulan umum menggunakan utas penyediaan pabrik yang tidak Permissions diaktifkan.
Atas kesalahan apa pun dalam menetapkan pengaturan ini, parameter default digunakan. Dimungkinkan untuk menonaktifkan atau membatasi penggunaan utas di kumpulan umum dengan mengatur properti paralelisme ke nol, dan/atau menggunakan pabrik yang dapat mengembalikan null. Namun melakukannya dapat menyebabkan tugas yang tidak bergabung tidak pernah dijalankan.
<b>Catatan implementasi:</b> Implementasi ini membatasi jumlah maksimum utas yang berjalan hingga 32767. Upaya untuk membuat kumpulan dengan jumlah maksimum yang lebih besar menghasilkan IllegalArgumentException.
Implementasi ini menolak tugas yang dikirimkan (yaitu, dengan melemparkan RejectedExecutionException) hanya ketika kumpulan dimatikan atau sumber daya internal telah habis.
Ditambahkan dalam 1.7.
Dokumentasi Java untuk java.util.concurrent.ForkJoinPool.
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
| ForkJoinPool() |
Membuat dengan paralelisme |
| ForkJoinPool(Int32) |
Membuat dengan tingkat paralelisme yang |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
Membuat dengan paralelisme yang sama dengan |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
Untuk |
| ForkJoinPool(IntPtr, JniHandleOwnership) |
Konstruktor yang digunakan saat membuat representasi terkelola objek JNI; dipanggil oleh runtime. |
Properti
| ActiveThreadCount |
Mengembalikan perkiraan jumlah utas yang saat ini mencuri atau menjalankan tugas. |
| AsyncMode |
Mengembalikan |
| Class |
Mengembalikan kelas runtime dari . |
| CommonPoolParallelism |
Mengembalikan tingkat paralelisme yang ditargetkan dari kumpulan umum. |
| DefaultForkJoinWorkerThreadFactory |
Membuat ForkJoinWorkerThread baru. |
| Factory |
Mengembalikan pabrik yang digunakan untuk membangun pekerja baru. |
| Handle |
Handel ke instans Android yang mendasar. (Diperoleh dari Object) |
| HasQueuedSubmissions |
Mengembalikan |
| IsQuiescent |
Mengembalikan |
| IsShutdown |
Mengembalikan |
| IsTerminated |
Mengembalikan |
| IsTerminating |
Mengembalikan |
| JniIdentityHashCode |
Untuk |
| JniPeerMembers |
Untuk |
| Parallelism |
Mengembalikan tingkat paralelisme yang ditargetkan dari kumpulan ini. |
| PeerReference |
Untuk |
| PoolSize |
Mengembalikan jumlah utas pekerja yang telah dimulai tetapi belum dihentikan. |
| QueuedSubmissionCount |
Mengembalikan perkiraan jumlah tugas yang dikirimkan ke kumpulan ini yang belum mulai dijalankan. |
| QueuedTaskCount |
Mengembalikan perkiraan jumlah total tugas yang saat ini disimpan dalam antrean oleh utas pekerja (tetapi tidak termasuk tugas yang dikirimkan ke kumpulan yang belum mulai dieksekusi). |
| RunningThreadCount |
Mengembalikan perkiraan jumlah utas pekerja yang tidak diblokir menunggu untuk bergabung dengan tugas atau untuk sinkronisasi terkelola lainnya. |
| StealCount |
Mengembalikan perkiraan jumlah total tugas yang diselesaikan yang dijalankan oleh utas selain pengirimnya. |
| 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. |
| UncaughtExceptionHandler |
Mengembalikan handler untuk utas pekerja internal yang berakhir karena kesalahan yang tidak dapat dipulihkan yang ditemui saat menjalankan tugas. |
Metode
| AwaitQuiescence(Int64, TimeUnit) |
Jika dipanggil oleh ForkJoinTask yang beroperasi di kumpulan ini, setara berlaku untuk |
| AwaitTermination(Int64, TimeUnit) |
Memblokir hingga semua tugas selesai dieksekusi setelah permintaan matikan, atau waktu habis terjadi, atau utas saat ini terganggu, mana pun yang terjadi terlebih dahulu. |
| AwaitTerminationAsync(Int64, TimeUnit) |
Untuk |
| Clone() |
Membuat dan mengembalikan salinan objek ini. (Diperoleh dari Object) |
| CommonPool() |
Mengembalikan instans kumpulan umum. |
| Dispose() |
Untuk |
| Dispose(Boolean) |
Untuk |
| DrainTasksTo(ICollection<ForkJoinTask>) |
Menghapus semua tugas yang dikirimkan dan dicabut yang tidak tereksteksi yang tersedia dari antrean penjadwalan dan menambahkannya ke koleksi yang diberikan, tanpa mengubah status eksekusinya. |
| Equals(Object) |
Menunjukkan apakah beberapa objek lain "sama dengan" yang satu ini. (Diperoleh dari Object) |
| Execute(ForkJoinTask) |
Mengatur eksekusi tugas yang diberikan (asinkron). |
| Execute(IRunnable) | |
| GetHashCode() |
Mengembalikan nilai kode hash untuk objek . (Diperoleh dari Object) |
| Invoke(ForkJoinTask) |
Melakukan tugas yang diberikan, mengembalikan hasilnya setelah selesai. |
| InvokeAll(ICollection) |
Untuk |
| InvokeAll(ICollection, Int64, TimeUnit) |
Untuk |
| InvokeAny(ICollection) |
Untuk |
| InvokeAny(ICollection, Int64, TimeUnit) |
Untuk |
| JavaFinalize() |
Dipanggil oleh pengumpul sampah pada objek ketika pengumpulan sampah menentukan bahwa tidak ada lagi referensi ke objek. (Diperoleh dari Object) |
| ManagedBlock(ForkJoinPool+IManagedBlocker) |
Menjalankan tugas yang diberikan mungkin memblokir. |
| NewTaskFor(ICallable) |
Mengembalikan untuk tugas yang |
| NewTaskFor(IRunnable, Object) |
Mengembalikan |
| Notify() |
Membangunkan satu utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| NotifyAll() |
Membangunkan semua utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| PollSubmission() |
Menghapus dan mengembalikan pengiriman berikutnya yang tidak tereksepsi jika tersedia. |
| SetHandle(IntPtr, JniHandleOwnership) |
Handle Mengatur properti. (Diperoleh dari Object) |
| Shutdown() |
Mungkin memulai pematian tertib di mana tugas yang dikirim sebelumnya dijalankan, tetapi tidak ada tugas baru yang akan diterima. |
| ShutdownNow() |
Mungkin mencoba membatalkan dan/atau menghentikan semua tugas, dan menolak semua tugas yang dikirimkan berikutnya. |
| Submit(ForkJoinTask) |
Mengirimkan ForkJoinTask untuk eksekusi. |
| Submit(ICallable) |
Untuk |
| Submit(IRunnable) |
Mengirimkan tugas yang Dapat Dijalankan untuk eksekusi dan mengembalikan Masa Depan yang mewakili tugas tersebut. (Diperoleh dari AbstractExecutorService) |
| Submit(IRunnable, Object) |
Untuk |
| ToArray<T>() |
Untuk |
| ToString() |
Mengembalikan representasi string objek. (Diperoleh dari Object) |
| UnregisterFromRuntime() |
Untuk |
| Wait() |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <diberitahu></em> atau <em>terganggu</em>. (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) |
| 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) |
Implementasi Antarmuka Eksplisit
| IJavaPeerable.Disposed() |
Untuk |
| IJavaPeerable.DisposeUnlessReferenced() |
Untuk |
| IJavaPeerable.Finalized() |
Untuk |
| IJavaPeerable.JniManagedPeerState |
Untuk |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Untuk |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Untuk |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Untuk |
Metode Ekstensi
| JavaCast<TResult>(IJavaObject) |
Melakukan konversi jenis yang diperiksa runtime Bahasa Umum Android. |
| JavaCast<TResult>(IJavaObject) |
Untuk |
| GetJniTypeName(IJavaPeerable) |
Untuk |
| AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
Untuk |
| InvokeAnyAsync(IExecutorService, ICollection) |
Untuk |
| InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
Untuk |