RecursiveAction Kelas

Definisi

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 .Object

(Diperoleh dari Object)
Exception

Mengembalikan pengecualian yang dilemparkan oleh komputasi dasar, atau CancellationException jika dibatalkan, atau null jika tidak ada atau jika metode belum selesai.

(Diperoleh dari ForkJoinTask)
ForkJoinTaskTag

Mengembalikan tag untuk tugas ini.

(Diperoleh dari ForkJoinTask)
Handle

Handel ke instans Android yang mendasar.

(Diperoleh dari Object)
IsCancelled

Mengembalikan true jika tugas ini dibatalkan sebelum selesai secara normal.

(Diperoleh dari ForkJoinTask)
IsCompletedAbnormally

Mengembalikan true jika tugas ini melemparkan pengecualian atau dibatalkan.

(Diperoleh dari ForkJoinTask)
IsCompletedNormally

Mengembalikan true jika tugas ini selesai tanpa melemparkan pengecualian dan tidak dibatalkan.

(Diperoleh dari ForkJoinTask)
IsDone

Mengembalikan true jika tugas ini selesai.

(Diperoleh dari ForkJoinTask)
JniIdentityHashCode

Mendapatkan kode hash identitas yang ditetapkan ke Java peer ini oleh runtime interop.

(Diperoleh dari Object)
JniManagedPeerState

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
JniPeerMembers

Hasil rekursif .ForkJoinTask

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 null jika tugas ini tidak diketahui telah selesai.

(Diperoleh dari ForkJoinTask)
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 join operasi terkait.

(Diperoleh dari ForkJoinTask)
CompleteExceptionally(Throwable)

Menyelesaikan tugas ini secara tidak normal, dan jika belum dibatalkan atau dibatalkan, menyebabkannya melemparkan pengecualian yang diberikan pada join dan operasi terkait.

(Diperoleh dari ForkJoinTask)
Compute()

Komputasi utama yang dilakukan oleh tugas ini.

Construct(JniObjectReference, JniObjectReferenceOptions)

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
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 .ForkJoinTask

(Diperoleh dari JavaObject)
Equals(Object)

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
Equals(Object)

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

(Diperoleh dari Object)
ExceptionNow()

Hasil rekursif .ForkJoinTask

(Diperoleh dari ForkJoinTask)
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 ForkJoinPool#commonPool() jika tidak #inForkJoinPool.

(Diperoleh dari ForkJoinTask)
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) RuntimeException atau Error jika komputasi yang mendasar melakukannya.

(Diperoleh dari ForkJoinTask)
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 fork.

(Diperoleh dari ForkJoinTask)
ResultNow()

Hasil rekursif .ForkJoinTask

(Diperoleh dari ForkJoinTask)
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 .ForkJoinTask

(Diperoleh dari JavaObject)
SetRawResult(Object)

Memaksa nilai yang diberikan untuk dikembalikan sebagai hasilnya.

(Diperoleh dari ForkJoinTask)
State()

Hasil rekursif .ForkJoinTask

(Diperoleh dari ForkJoinTask)
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 .ForkJoinTask

(Diperoleh dari JavaObject)
IJavaPeerable.Finalized()

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Hasil rekursif .ForkJoinTask

(Diperoleh dari JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Hasil rekursif .ForkJoinTask

(Diperoleh dari ForkJoinTask)

Metode Ekstensi

Nama Deskripsi
GetAsync(IFuture, Int64, TimeUnit)

Hasil rekursif .ForkJoinTask

GetAsync(IFuture)

Hasil rekursif .ForkJoinTask

GetJniTypeName(IJavaPeerable)

Mendapatkan nama JNI dari jenis instans self.

JavaAs<TResult>(IJavaPeerable)

Cobalah untuk memaksa self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

JavaCast<TResult>(IJavaObject)

Melakukan konversi jenis yang diperiksa runtime Android.

JavaCast<TResult>(IJavaObject)

Hasil rekursif .ForkJoinTask

TryJavaCast<TResult>(IJavaPeerable, TResult)

Cobalah untuk memaksa self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

Berlaku untuk