RecursiveAction 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.
Hasil rekursif .ForkJoinTask
[Android.Runtime.Register("java/util/concurrent/RecursiveAction", DoNotGenerateAcw=true)]
public abstract class RecursiveAction : Java.Util.Concurrent.ForkJoinTask
[<Android.Runtime.Register("java/util/concurrent/RecursiveAction", DoNotGenerateAcw=true)>]
type RecursiveAction = class
inherit ForkJoinTask
- Warisan
- Atribut
Keterangan
Hasil rekursif .ForkJoinTask Kelas ini menetapkan konvensi untuk membuat parameter tindakan tanpa hasil sebagai VoidForkJoinTask. Karena null adalah satu-satunya nilai jenis Void, metode yang valid seperti join selalu kembali null setelah selesai.
<b>Penggunaan Sampel.</b> Berikut adalah pengurutan ForkJoin sederhana tetapi lengkap yang mengurutkan array tertentu long[] :
{@code
static class SortTask extends RecursiveAction {
final long[] array; final int lo, hi;
SortTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
SortTask(long[] array) { this(array, 0, array.length); }
protected void compute() {
if (hi - lo < THRESHOLD)
sortSequentially(lo, hi);
else {
int mid = (lo + hi) >>> 1;
invokeAll(new SortTask(array, lo, mid),
new SortTask(array, mid, hi));
merge(lo, mid, hi);
}
}
// implementation details follow:
static final int THRESHOLD = 1000;
void sortSequentially(int lo, int hi) {
Arrays.sort(array, lo, hi);
}
void merge(int lo, int mid, int hi) {
long[] buf = Arrays.copyOfRange(array, lo, mid);
for (int i = 0, j = lo, k = mid; i < buf.length; j++)
array[j] = (k == hi || buf[i] < array[k]) ?
buf[i++] : array[k++];
}
}}
Anda kemudian dapat mengurutkan anArray dengan membuat new SortTask(anArray) dan memanggilnya di ForkJoinPool. Sebagai contoh sederhana yang lebih konkret, tugas berikut menaikkan setiap elemen array:
{@code
class IncrementTask extends RecursiveAction {
final long[] array; final int lo, hi;
IncrementTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
protected void compute() {
if (hi - lo < THRESHOLD) {
for (int i = lo; i < hi; ++i)
array[i]++;
}
else {
int mid = (lo + hi) >>> 1;
invokeAll(new IncrementTask(array, lo, mid),
new IncrementTask(array, mid, hi));
}
}
}}
Contoh berikut mengilustrasikan beberapa penyempurnaan dan idiom yang dapat menyebabkan performa yang lebih baik: RecursiveActions tidak perlu sepenuhnya rekursif, selama mereka mempertahankan pendekatan pembagian dan penaklukan dasar. Berikut adalah kelas yang menjumlahkan kuadrat dari setiap elemen larik ganda, dengan membalai hanya sisi kanan pembagian berulang dengan dua, dan melacaknya dengan rantai next referensi. Ini menggunakan ambang batas dinamis berdasarkan metode getSurplusQueuedTaskCount, tetapi penyeimbangan potensi partisi berlebih dengan langsung melakukan tindakan daun pada tugas yang tidak terpecahkan daripada membagi lebih lanjut.
{@code
double sumOfSquares(ForkJoinPool pool, double[] array) {
int n = array.length;
Applyer a = new Applyer(array, 0, n, null);
pool.invoke(a);
return a.result;
}
class Applyer extends RecursiveAction {
final double[] array;
final int lo, hi;
double result;
Applyer next; // keeps track of right-hand-side tasks
Applyer(double[] array, int lo, int hi, Applyer next) {
this.array = array; this.lo = lo; this.hi = hi;
this.next = next;
}
double atLeaf(int l, int h) {
double sum = 0;
for (int i = l; i < h; ++i) // perform leftmost base step
sum += array[i] * array[i];
return sum;
}
protected void compute() {
int l = lo;
int h = hi;
Applyer right = null;
while (h - l > 1 && getSurplusQueuedTaskCount() <= 3) {
int mid = (l + h) >>> 1;
right = new Applyer(array, mid, h, right);
right.fork();
h = mid;
}
double sum = atLeaf(l, h);
while (right != null) {
if (right.tryUnfork()) // directly calculate if not stolen
sum += right.atLeaf(right.lo, right.hi);
else {
right.join();
sum += right.result;
}
right = right.next;
}
result = sum;
}
}}
Ditambahkan dalam 1.7.
Java dokumentasi untuk java.util.concurrent.RecursiveAction.
Bagian dari halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Android Open Source Project dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Creative Commons 2.5 Lisensi Atribusi.
Konstruktor
| Nama | Deskripsi |
|---|---|
| RecursiveAction() |
Konstruktor untuk subkelas yang akan dipanggil. |
| RecursiveAction(IntPtr, JniHandleOwnership) |
Konstruktor yang digunakan saat membuat representasi terkelola objek JNI; dipanggil oleh runtime. |
Properti
| Nama | Deskripsi |
|---|---|
| Class |
Mengembalikan kelas runtime dari . |
| Exception |
Mengembalikan pengecualian yang dilemparkan oleh komputasi dasar, atau |
| ForkJoinTaskTag |
Mengembalikan tag untuk tugas ini. (Diperoleh dari ForkJoinTask) |
| Handle |
Handel ke instans Android yang mendasar. (Diperoleh dari Object) |
| IsCancelled |
Mengembalikan |
| IsCompletedAbnormally |
Mengembalikan |
| IsCompletedNormally |
Mengembalikan |
| IsDone |
Mengembalikan |
| JniIdentityHashCode |
Mendapatkan kode hash identitas yang ditetapkan ke Java peer ini oleh runtime interop. (Diperoleh dari Object) |
| JniManagedPeerState |
Hasil rekursif . |
| JniPeerMembers |
Hasil rekursif . |
| PeerReference |
Mendapatkan referensi objek JNI untuk peer Java ini. (Diperoleh dari Object) |
| RawRawResult |
Mengembalikan hasil yang akan dikembalikan oleh Join(), meskipun tugas ini selesai secara tidak normal, atau |
| 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
| Nama | Deskripsi |
|---|---|
| Cancel(Boolean) |
Mencoba membatalkan eksekusi tugas ini. (Diperoleh dari ForkJoinTask) |
| Clone() |
Membuat dan mengembalikan salinan objek ini. (Diperoleh dari Object) |
| CompareAndSetForkJoinTaskTag(Int16, Int16) |
Secara kondisional mengatur nilai tag untuk tugas ini secara atomik. (Diperoleh dari ForkJoinTask) |
| Complete(Object) |
Menyelesaikan tugas ini, dan jika belum dibatalkan atau dibatalkan, mengembalikan nilai yang diberikan sebagai hasil dari pemanggilan berikutnya dan |
| CompleteExceptionally(Throwable) |
Menyelesaikan tugas ini secara tidak normal, dan jika belum dibatalkan atau dibatalkan, menyebabkannya melemparkan pengecualian yang diberikan pada |
| Compute() |
Komputasi utama yang dilakukan oleh tugas ini. |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Hasil rekursif . |
| Dispose() |
Merilis sumber daya yang dipegang oleh rekan Java ini. (Diperoleh dari Object) |
| Dispose(Boolean) |
Merilis sumber daya yang dipegang oleh rekan Java ini. (Diperoleh dari Object) |
| DisposeUnlessReferenced() |
Hasil rekursif . |
| Equals(Object) |
Hasil rekursif . |
| Equals(Object) |
Menunjukkan apakah beberapa objek lain "sama dengan" yang satu ini. (Diperoleh dari Object) |
| ExceptionNow() |
Hasil rekursif . |
| Exec() |
Menerapkan konvensi eksekusi untuk RecursiveActions. |
| Fork() |
Mengatur untuk menjalankan tugas ini secara asinkron di kumpulan tempat tugas saat ini berjalan, jika berlaku, atau menggunakan |
| Get() |
Menunggu jika perlu untuk menyelesaikan komputasi, lalu mengambil hasilnya. (Diperoleh dari ForkJoinTask) |
| Get(Int64, TimeUnit) |
Menunggu jika perlu untuk sebagian besar waktu yang diberikan agar komputasi selesai, lalu mengambil hasilnya, jika tersedia. (Diperoleh dari ForkJoinTask) |
| GetHashCode() |
Mengembalikan nilai kode hash untuk objek . (Diperoleh dari Object) |
| Invoke() |
Memulai melakukan tugas ini, menunggu penyelesaiannya jika perlu, dan mengembalikan hasilnya, atau melempar (tidak dicentang) |
| JavaFinalize() |
Dipanggil oleh pengumpul sampah pada objek ketika pengumpulan sampah menentukan bahwa tidak ada lagi referensi ke objek. (Diperoleh dari Object) |
| Join() |
Mengembalikan hasil komputasi saat #isDone selesai. (Diperoleh dari ForkJoinTask) |
| Notify() |
Membangunkan satu utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| NotifyAll() |
Membangunkan semua utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| QuietlyComplete() |
Menyelesaikan tugas ini secara normal tanpa mengatur nilai. (Diperoleh dari ForkJoinTask) |
| QuietlyInvoke() |
Memulai melakukan tugas ini dan menunggu penyelesaiannya jika perlu, tanpa mengembalikan hasilnya atau melemparkan pengecualiannya. (Diperoleh dari ForkJoinTask) |
| QuietlyJoin() |
Menggabungkan tugas ini, tanpa mengembalikan hasilnya atau melemparkan pengecualiannya. (Diperoleh dari ForkJoinTask) |
| QuietlyJoin(Int64, TimeUnit) |
Mencoba bergabung dengan tugas ini, mengembalikan true jika selesai (mungkin luar biasa) sebelum batas waktu yang diberikan dan utas saat ini belum terganggu. (Diperoleh dari ForkJoinTask) |
| QuietlyJoinUninterruptibly(Int64, TimeUnit) |
Mencoba bergabung dengan tugas ini, mengembalikan true jika selesai (mungkin luar biasa) sebelum batas waktu yang diberikan. (Diperoleh dari ForkJoinTask) |
| Reinitialize() |
Mengatur ulang status pembbukuan internal tugas ini, memungkinkan |
| ResultNow() |
Hasil rekursif . |
| SetForkJoinTaskTag(Int16) |
Secara atomis mengatur nilai tag untuk tugas ini dan mengembalikan nilai lama. (Diperoleh dari ForkJoinTask) |
| SetHandle(IntPtr, JniHandleOwnership) |
Mengatur properti Handle. (Diperoleh dari Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Hasil rekursif . |
| SetRawResult(Object) |
Memaksa nilai yang diberikan untuk dikembalikan sebagai hasilnya. (Diperoleh dari ForkJoinTask) |
| State() |
Hasil rekursif . |
| ToArray<T>() |
Membuat array terkelola dari pembungkus array Java ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan representasi string objek. (Diperoleh dari Object) |
| TryUnfork() |
Mencoba membatalkan jadwal tugas ini untuk eksekusi. (Diperoleh dari ForkJoinTask) |
| UnregisterFromRuntime() |
Membatalkan pendaftaran peer Java ini dari runtime interop. (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 waktu nyata berlalu. (Diperoleh dari Object) |
| Wait(Int64) |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah waktu nyata berlalu. (Diperoleh dari Object) |
Implementasi Antarmuka Eksplisit
| Nama | Deskripsi |
|---|---|
| IJavaPeerable.Disposed() |
Hasil rekursif . |
| IJavaPeerable.Finalized() |
Hasil rekursif . |
| IJavaPeerable.JniObjectReferenceControlBlock |
Hasil rekursif . |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Hasil rekursif . |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Hasil rekursif . |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Hasil rekursif . |
| IJavaPeerable.UnregisterFromRuntime() |
Hasil rekursif . |
Metode Ekstensi
| Nama | Deskripsi |
|---|---|
| GetAsync(IFuture, Int64, TimeUnit) |
Hasil rekursif . |
| GetAsync(IFuture) |
Hasil rekursif . |
| GetJniTypeName(IJavaPeerable) |
Mendapatkan nama JNI dari jenis instans |
| JavaAs<TResult>(IJavaPeerable) |
Cobalah untuk memaksa |
| JavaCast<TResult>(IJavaObject) |
Melakukan konversi jenis yang diperiksa runtime Android. |
| JavaCast<TResult>(IJavaObject) |
Hasil rekursif . |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Cobalah untuk memaksa |