語言

CountedCompleter 類別

定義

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

[Android.Runtime.Register("java/util/concurrent/CountedCompleter", ApiSince=24, DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public abstract class CountedCompleter : Java.Util.Concurrent.ForkJoinTask
[<Android.Runtime.Register("java/util/concurrent/CountedCompleter", ApiSince=24, DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type CountedCompleter = class
    inherit ForkJoinTask
繼承
屬性

備註

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。 CountedCompleters 在子任務停滯與阻塞的情況下,通常比其他形式的 ForkJoinTasks 更為穩健,但程式設計上較不直覺。 CountedCompleter 的用途與其他基於完備的元件(例如 java.nio.channels.CompletionHandler)類似,但觸發完備動作<可能需要多個 >em<待處理>/完成#onCompletion(CountedCompleter),而非僅一個。 除非另有初始化,待處理計數 #getPendingCount 從零開始,但可透過 #setPendingCount#addToPendingCount#compareAndSetPendingCount和 的方法(原子層面)更改。 在呼叫 時 #tryComplete,若待處理的動作計數非零,則會遞減;否則執行完備動作,且若該完成器本身有完備者,則該程序會以其完備者繼續。 與相關的同步元件 Phaser 如 和 Semaphore一樣,這些方法僅影響內部計數;它們不會建立任何進一步的內部帳務。 特別是,待處理任務的身份不會被維護。 如下圖所示,你可以建立子類別,在需要時記錄部分或全部待處理任務或其結果。 如下所示,也提供了支援完成遍歷自訂的工具方法。 然而,由於 CountedCompleters 僅提供基本的同步機制,可能有助於建立更多抽象子類別,以維持連結、欄位及適合相關用途的額外支援方法。

一個具體的 CountedCompleter 類別必須定義方法,該方法 #compute在大多數情況下(如下所示)應先 tryComplete() 呼叫一次後返回。 該類別也可以選擇覆蓋方法 #onCompletion(CountedCompleter) ,使其在正常完成時執行動作,以及 #onExceptionalCompletion(Throwable, CountedCompleter) 方法在任意例外時執行動作。

CountedCompletionrs 通常不會產生結果,這時通常會宣告為 CountedCompleter<Void>,並且總是以結果值的形式回傳 null 。 在其他情況下,你應該覆寫方法 #getRawResult 以提供來自 join(), invoke()及相關方法的結果。 一般而言,此方法應回傳 CountedCompleter 物件中一個欄位(或一個或多個欄位的函數)的值,該欄位在完成時會保留該結果。 方法 #setRawResult 預設在 CountedCompletionrs 中不扮演角色。 雖然可以,但很少適用,可以覆寫此方法以維護其他物件或欄位中儲存結果資料。

一個本身沒有完整運算器的 CountedCompleter(即 #getCompleter 回傳 null的 ),可作為附加此功能的一般 ForkJoinTask 使用。 然而,任何有另一個完備器的補全器僅作為其他計算的內部輔助者,因此其自身的任務狀態(如 ForkJoinTask#isDone)是任意的;此狀態僅在明確呼叫 #completeForkJoinTask#cancelForkJoinTask#completeExceptionally(Throwable) 方法異常完成 compute時改變。 在任何異常完成時,該例外可能會被轉發給任務的完成者(如此類推),前提是任務已存在且尚未完成。 同樣地,取消內部的 CountedCompleter 只會對該完整器產生局部影響,因此通常沒什麼用處。

<b>範例用法。</b>

<b>平行遞迴分解。</b> CountedCompleters 可以排列成類似於常用 s 的 RecursiveAction樹狀結構,儘管設置時涉及的結構通常會有所不同。 此處,每個任務的完成者是其計算樹中的父節點。 雖然 CountedCompleters 需要較多的簿記,但在對陣列或集合的每個元素應用可能耗時(且無法進一步細分)的操作時,可能是更好的選擇;尤其是當某些元素所需的時間與其他元素有顯著差異時,無論是因為內在變異(例如 I/O)或輔助效應如垃圾回收。 由於 CountedCompletionrs 自行提供續接,其他任務不必阻塞等待來執行。

例如,這裡有一個利用工具方法的初始版本,利用除以二的遞迴分解將工作分割成單一部分(葉節點任務)。 即使工作被拆分成個別呼叫,基於樹狀的技術通常也比直接分支葉節點任務更可取,因為它們減少執行緒間通訊並改善負載平衡。 在遞迴情況下,每對子任務中第二個完成的子任務會觸發其父任務的完成(因為沒有執行結果組合,方法的預設 no-op 實作 onCompletion 不會被覆寫)。 工具方法設定根任務並呼叫它(此處隱含使用 ForkJoinPool#commonPool())。 將待處理任務數量設為子任務數量,並在返回前立即呼叫 tryComplete() ,是直接且可靠(但並非最佳)。

{@code
            public static <E> void forEach(E[] array, Consumer<E> action) {
              class Task extends CountedCompleter<Void> {
                final int lo, hi;
                Task(Task parent, int lo, int hi) {
                  super(parent); this.lo = lo; this.hi = hi;
                }

                public void compute() {
                  if (hi - lo >= 2) {
                    int mid = (lo + hi) >>> 1;
                    // must set pending count before fork
                    setPendingCount(2);
                    new Task(this, mid, hi).fork(); // right child
                    new Task(this, lo, mid).fork(); // left child
                  }
                  else if (hi > lo)
                    action.accept(array[lo]);
                  tryComplete();
                }
              }
              new Task(null, 0, array.length).invoke();
            }}

此設計可透過觀察遞迴情況下,任務在分支右任務後不再有其他處理,因此可以直接呼叫左任務再返回來改進。 (這是尾遞迴移除的類比。)此外,當任務的最後一個動作是分叉或呼叫子任務(稱為「尾部呼叫」)時,呼叫 tryComplete() 可以被優化去除,但代價是讓待處理的計數看起來「偏差一」。

{@code
                public void compute() {
                  if (hi - lo >= 2) {
                    int mid = (lo + hi) >>> 1;
                    setPendingCount(1); // looks off by one, but correct!
                    new Task(this, mid, hi).fork(); // right child
                    new Task(this, lo, mid).compute(); // direct invoke
                  } else {
                    if (hi > lo)
                      action.accept(array[lo]);
                    tryComplete();
                  }
                }}

進一步優化,請注意左邊任務甚至不一定存在。 我們不必建立新分支,而是繼續使用原始任務,並為每個分支新增待處理的計數。 此外,由於此樹中沒有任何任務實作方法 #onCompletion(CountedCompleter)tryComplete 可以替換為 #propagateCompletion

{@code
                public void compute() {
                  int n = hi - lo;
                  for (; n >= 2; n /= 2) {
                    addToPendingCount(1);
                    new Task(this, lo + n/2, lo + n).fork();
                  }
                  if (n > 0)
                    action.accept(array[lo]);
                  propagateCompletion();
                }}

當待計算計數可預先計算時,可在構造子中建立:

{@code
            public static <E> void forEach(E[] array, Consumer<E> action) {
              class Task extends CountedCompleter<Void> {
                final int lo, hi;
                Task(Task parent, int lo, int hi) {
                  super(parent, 31 - Integer.numberOfLeadingZeros(hi - lo));
                  this.lo = lo; this.hi = hi;
                }

                public void compute() {
                  for (int n = hi - lo; n >= 2; n /= 2)
                    new Task(this, lo + n/2, lo + n).fork();
                  action.accept(array[lo]);
                  propagateCompletion();
                }
              }
              if (array.length > 0)
                new Task(null, 0, array.length).invoke();
            }}

此類類別的進一步優化可能包括專門化葉步類別,例如以四層而非兩次細分,並使用自適應閾值而非每次細分到單一元素。

<b>搜尋。</b> CountedCompleters 樹可以在資料結構的不同部分搜尋值或屬性,並在找到結果後立即回報 java.util.concurrent.atomic.AtomicReference AtomicReference 。 其他人可以投票結果,避免不必要的工作。 (你也可以 #cancel 取消其他任務,但通常讓客戶注意到結果已設定,如果是的話就跳過後續處理會更簡單且更有效率。)再舉例說明一個使用全分割的陣列(實務上葉節點任務幾乎總是會處理多個元素):

{@code
            class Searcher<E> extends CountedCompleter<E> {
              final E[] array; final AtomicReference<E> result; final int lo, hi;
              Searcher(CountedCompleter<?> p, E[] array, AtomicReference<E> result, int lo, int hi) {
                super(p);
                this.array = array; this.result = result; this.lo = lo; this.hi = hi;
              }
              public E getRawResult() { return result.get(); }
              public void compute() { // similar to ForEach version 3
                int l = lo, h = hi;
                while (result.get() == null && h >= l) {
                  if (h - l >= 2) {
                    int mid = (l + h) >>> 1;
                    addToPendingCount(1);
                    new Searcher(this, array, result, mid, h).fork();
                    h = mid;
                  }
                  else {
                    E x = array[l];
                    if (matches(x) && result.compareAndSet(null, x))
                      quietlyCompleteRoot(); // root task is now joinable
                    break;
                  }
                }
                tryComplete(); // normally complete whether or not found
              }
              boolean matches(E e) { ... } // return true if found

              public static <E> E search(E[] array) {
                  return new Searcher<E>(null, array, new AtomicReference<E>(), 0, array.length).invoke();
              }
            }}

在這個例子中,以及其他任務除了對 compareAndSet 共同結果沒有其他影響的例子中,後 tryComplete 尾無條件調用可以改為條件(if (result.get() == null) tryComplete();),因為根任務完成後不需要再做帳務來管理完成事項。

<b>記錄子任務。</b> CountedCompletionr 任務結合多個子任務結果,通常需要在方法 #onCompletion(CountedCompleter)中存取這些結果。 如以下類別所示(執行簡化版的映射約簡,映射與約簡皆為類型 E),分治設計中的一種方法是讓每個子任務記錄其兄弟任務,以便以方法 onCompletion存取。 此技術適用於左與右組合順序不影響結果的歸約;有序約簡需要明確的左右標示。 上述範例中其他流線型的變體也可能適用。

{@code
            class MyMapper<E> { E apply(E v) {  ...  } }
            class MyReducer<E> { E apply(E x, E y) {  ...  } }
            class MapReducer<E> extends CountedCompleter<E> {
              final E[] array; final MyMapper<E> mapper;
              final MyReducer<E> reducer; final int lo, hi;
              MapReducer<E> sibling;
              E result;
              MapReducer(CountedCompleter<?> p, E[] array, MyMapper<E> mapper,
                         MyReducer<E> reducer, int lo, int hi) {
                super(p);
                this.array = array; this.mapper = mapper;
                this.reducer = reducer; this.lo = lo; this.hi = hi;
              }
              public void compute() {
                if (hi - lo >= 2) {
                  int mid = (lo + hi) >>> 1;
                  MapReducer<E> left = new MapReducer(this, array, mapper, reducer, lo, mid);
                  MapReducer<E> right = new MapReducer(this, array, mapper, reducer, mid, hi);
                  left.sibling = right;
                  right.sibling = left;
                  setPendingCount(1); // only right is pending
                  right.fork();
                  left.compute();     // directly execute left
                }
                else {
                  if (hi > lo)
                      result = mapper.apply(array[lo]);
                  tryComplete();
                }
              }
              public void onCompletion(CountedCompleter<?> caller) {
                if (caller != this) {
                  MapReducer<E> child = (MapReducer<E>)caller;
                  MapReducer<E> sib = child.sibling;
                  if (sib == null || sib.result == null)
                    result = child.result;
                  else
                    result = reducer.apply(child.result, sib.result);
                }
              }
              public E getRawResult() { return result; }

              public static <E> E mapReduce(E[] array, MyMapper<E> mapper, MyReducer<E> reducer) {
                return new MapReducer<E>(null, array, mapper, reducer,
                                         0, array.length).invoke();
              }
            }}

此處,方法 onCompletion 採用許多結合結果的完備設計常見的形式。 這種回調式方法在每個任務中會觸發一次,無論是在待處理計數為零或變為零的兩種情境中:(1) 由任務本身觸發,若其待處理計數在呼叫 tryComplete時為零;(2) 由其任一子任務在完成並將待處理計數減少為零時觸發。 此 caller 論點區分案例。 大多數情況下,當呼叫者是 this時,不需要採取任何行動。 否則,呼叫者參數(通常透過鑄造)可用來提供一個值(及/或連結其他值)以便合併。 假設正確使用待處理計數,內部 onCompletion 的動作會在完成任務及其子任務時(僅發生一次)。 此方法中不需要額外的同步,以確保對該任務或其他已完成任務欄位存取的執行緒安全。

<b>完成遍歷。</b> 如果用 onCompletion 來處理補全不適用或不方便,你可以使用方法 #firstComplete#nextComplete 建立自訂遍歷。 例如,要定義一個僅以第三個 ForEach 範例形式分割右手任務的 MapReducer,完備運算必須沿著未耗盡的子任務連結協同約簡,具體步驟如下:

{@code
            class MapReducer<E> extends CountedCompleter<E> { // version 2
              final E[] array; final MyMapper<E> mapper;
              final MyReducer<E> reducer; final int lo, hi;
              MapReducer<E> forks, next; // record subtask forks in list
              E result;
              MapReducer(CountedCompleter<?> p, E[] array, MyMapper<E> mapper,
                         MyReducer<E> reducer, int lo, int hi, MapReducer<E> next) {
                super(p);
                this.array = array; this.mapper = mapper;
                this.reducer = reducer; this.lo = lo; this.hi = hi;
                this.next = next;
              }
              public void compute() {
                int l = lo, h = hi;
                while (h - l >= 2) {
                  int mid = (l + h) >>> 1;
                  addToPendingCount(1);
                  (forks = new MapReducer(this, array, mapper, reducer, mid, h, forks)).fork();
                  h = mid;
                }
                if (h > l)
                  result = mapper.apply(array[l]);
                // process completions by reducing along and advancing subtask links
                for (CountedCompleter<?> c = firstComplete(); c != null; c = c.nextComplete()) {
                  for (MapReducer t = (MapReducer)c, s = t.forks; s != null; s = t.forks = s.next)
                    t.result = reducer.apply(t.result, s.result);
                }
              }
              public E getRawResult() { return result; }

              public static <E> E mapReduce(E[] array, MyMapper<E> mapper, MyReducer<E> reducer) {
                return new MapReducer<E>(null, array, mapper, reducer,
                                         0, array.length, null).invoke();
              }
            }}

<b>觸發器。</b> 有些 CountedCompleters 本身從未被分叉,而是在其他設計中作為管道的 bits;包括完成一個或多個非同步任務會觸發另一個非同步任務的系統。 例如:

{@code
            class HeaderBuilder extends CountedCompleter<...> { ... }
            class BodyBuilder extends CountedCompleter<...> { ... }
            class PacketSender extends CountedCompleter<...> {
              PacketSender(...) { super(null, 1); ... } // trigger on second completion
              public void compute() { } // never called
              public void onCompletion(CountedCompleter<?> caller) { sendPacket(); }
            }
            // sample use:
            PacketSender p = new PacketSender();
            new HeaderBuilder(p, ...).fork();
            new BodyBuilder(p, ...).fork();}

新增於1.8版本。

Java 文件 java.util.concurrent.CountedCompleter

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
CountedCompleter()

建立一個新的 CountedCompleter,沒有補全器,初始待處理計數為零。

CountedCompleter(CountedCompleter, Int32)

建立一個新的 CountedCompleter,包含給定的 completer 和初始待處理計數。

CountedCompleter(CountedCompleter)

建立一個新的 CountedCompleter,包含給定的 completer 和初始待處理計數為零。

CountedCompleter(IntPtr, JniHandleOwnership)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Completer

回傳本任務建構子中建立的完成符,若 null 無則回傳。

Exception

回傳基礎計算拋出的例外,若被取消則CancellationException回傳異常,若無例外則回傳 a,若方法尚未完成則為 anull

(繼承來源 ForkJoinTask)
ForkJoinTaskTag

會回傳此任務的標籤。

(繼承來源 ForkJoinTask)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
IsCancelled

如果此任務在正常完成前被取消,則會回傳 true

(繼承來源 ForkJoinTask)
IsCompletedAbnormally

如果此任務拋出例外或被取消,則會回傳 true

(繼承來源 ForkJoinTask)
IsCompletedNormally

如果該任務完成且未拋出例外且未被取消,則會回傳 true

(繼承來源 ForkJoinTask)
IsDone

如果完成此任務,則返回 true

(繼承來源 ForkJoinTask)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
JniPeerMembers

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
PendingCount

回傳目前待處理的計數。 -或- 將待處理計數設定為給定值。

RawRawResult

回傳由 回 Join()傳的結果,即使該任務異常完成,或 null 未知任務已完成。

(繼承來源 ForkJoinTask)
RawResult

回傳計算結果。

Root

回傳目前計算的根;i.

ThresholdClass

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

ThresholdType

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

方法

名稱 Description
AddToPendingCount(Int32)

將給定值(原子層次)加到待處理的計數中。

Cancel(Boolean)

試圖取消執行此任務。

(繼承來源 ForkJoinTask)
Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
CompareAndSetForkJoinTaskTag(Int16, Int16)

原子條件設定此任務的標籤值。

(繼承來源 ForkJoinTask)
CompareAndSetPendingCount(Int32, Int32)

僅當待計數目前保持給定期望值時,才能(原子層次)將待計數設定為給定計數。

Complete(Object)

無論有沒有待處理計數,呼叫 #onCompletion(CountedCompleter)都會將此任務標記為完成,並會觸發 #tryComplete 該任務的完成者(如果存在的話)。

CompleteExceptionally(Throwable)

會異常完成此任務,若未中止或取消,則會對相關操作拋出該異常 join

(繼承來源 ForkJoinTask)
Compute()

此任務主要執行計算。

Construct(JniObjectReference, JniObjectReferenceOptions)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
DecrementPendingCountUnlessZero()

若待處理計數非零,則(原子層面)會遞減。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
Equals(Object)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
ExceptionNow()

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 ForkJoinTask)
Exec()

實作 CountedCompletionrs 的執行慣例。

FirstComplete()

若該任務的待處理計數為零,則回傳此任務;否則 會遞減待處理的計數並返回 null

Fork()

安排在目前任務正在執行的池中非同步執行此任務(若適用),若不適用ForkJoinPool#commonPool()則使用 #inForkJoinPool

(繼承來源 ForkJoinTask)
Get()

必要時等待計算完成,然後取回結果。

(繼承來源 ForkJoinTask)
Get(Int64, TimeUnit)

如有需要,最多等待計算完成指定時間,然後若有結果則取回。

(繼承來源 ForkJoinTask)
GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
HelpComplete(Int32)

若該任務尚未完成,則嘗試處理該任務在完成路徑上的其他未處理任務數量(若已知存在)。

Invoke()

開始執行此任務,必要時等待完成,並回傳結果,或拋出(未檢查) RuntimeExceptionError 若底層計算已完成。

(繼承來源 ForkJoinTask)
JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Join()

計算 #isDone 完成後回傳結果。

(繼承來源 ForkJoinTask)
NextComplete()

若此任務沒有完備符,則呼叫 ForkJoinTask#quietlyComplete 並返回 null

Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
OnCompletion(CountedCompleter)

#tryComplete 方法被呼叫且待處理計數為零,或在無條件方法 #complete 被呼叫時執行動作。

OnExceptionalCompletion(Throwable, CountedCompleter)

#completeExceptionally(Throwable) 方法被呼叫或 #compute 方法拋出異常,且該任務尚未正常完成時,執行動作。

PropagateCompletion()

等價 #tryComplete 於但不沿完成路徑呼叫 #onCompletion(CountedCompleter) :若待處理計數非零,則計數遞減;否則,嘗試完成該任務的完成符(若存在),否則標記該任務完成。

QuietlyComplete()

通常會完成此任務,且不設定值。

(繼承來源 ForkJoinTask)
QuietlyCompleteRoot()

相當於 getRoot().quietlyComplete()

QuietlyInvoke()

開始執行此任務,必要時等待完成,且不返回結果或拋棄例外。

(繼承來源 ForkJoinTask)
QuietlyJoin()

加入此任務,且不返回結果或拋棄例外。

(繼承來源 ForkJoinTask)
QuietlyJoin(Int64, TimeUnit)

嘗試加入此任務,若在逾時前完成(可能異常)且當前執行緒未被中斷,則回傳 true。

(繼承來源 ForkJoinTask)
QuietlyJoinUninterruptibly(Int64, TimeUnit)

嘗試加入此任務,若在給定的超時前完成(可能異常完成),則返回為真。

(繼承來源 ForkJoinTask)
Reinitialize()

重置此任務的內部記帳狀態,允許後續 fork的 。

(繼承來源 ForkJoinTask)
ResultNow()

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 ForkJoinTask)
SetForkJoinTaskTag(Int16)

原子式設定此任務的標籤值並回傳舊值。

(繼承來源 ForkJoinTask)
SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
SetRawResult(Object)

結果產生的 CountedCompleters 可選擇性地使用此方法來協助維護結果資料。

State()

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 ForkJoinTask)
ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

回傳物件的字串表示。

(繼承來源 Object)
TryComplete()

若待處理計數非零,則計數遞減;否則 呼叫 #onCompletion(CountedCompleter) 並嘗試完成該任務的 completer(若存在,否則 標記此任務為完成)。

TryUnfork()

嘗試取消排程執行此任務。

(繼承來源 ForkJoinTask)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 JavaObject)
IJavaPeerable.UnregisterFromRuntime()

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

(繼承來源 ForkJoinTask)

擴充方法

名稱 Description
GetAsync(IFuture, Int64, TimeUnit)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

GetAsync(IFuture)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

ForkJoinTask A 在觸發時執行完成動作,且沒有剩餘待處理的動作。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於