鴻蒙OS ConditionHelper

2022-08-22 15:09 更新

ConditionHelper

java.lang.Object

|---ohos.utils.ConditionHelper

public class ConditionHelper
extends Object

一個幫助類,用于使用 java.util.concurrent.locks 包中內(nèi)置的 Condition 類,而不處理 Lock 和 java.lang.InterruptedException 異常。

ConditionHelper 對象提供用于掛起線程(使其等待)或喚醒等待線程的接口。 它支持無限等待或定時等待。 線程在被喚醒或經(jīng)過指定的等待時間后才會退出等待狀態(tài)。

使用 ConditionHelper 類時要注意以下幾點:

  • 如果線程被喚醒后不重置喚醒狀態(tài),下次調(diào)用ConditionHelper#await或ConditionHelper#await(long awaitMs)方法時會立即返回執(zhí)行結(jié)果。
  • ConditionHelper#await(long awaitMs) 方法不能確保精確計時。
  • 如果在等待期間發(fā)生 java.lang.InterruptedException 異常,等待狀態(tài)不會終止。 線程被喚醒或等待時間過去后,可以使用 Thread.currentThread().isInterrupted() 來檢查線程是否被中斷。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
ConditionHelper() 用于創(chuàng)建具有默認(rèn)喚醒狀態(tài) false 的 ConditionHelper 實例的構(gòu)造函數(shù)。
ConditionHelper(boolean isWakeup) 用于創(chuàng)建具有指定喚醒狀態(tài)的 ConditionHelper 實例的構(gòu)造函數(shù)。

方法總結(jié)

修飾符和類型 方法 描述
void await() 掛起當(dāng)前線程,直到它被喚醒。
boolean await(long awaitMs) 暫停當(dāng)前線程,直到它被喚醒或等待時間過去。
void resetCondition() 將喚醒狀態(tài)重置為 false,然后您可以調(diào)用 await()。
void wakeup() 喚醒當(dāng)前對象的線程并將其喚醒狀態(tài)設(shè)置為 true。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

構(gòu)造函數(shù)詳細(xì)信息

ConditionHelper

public ConditionHelper()

用于創(chuàng)建具有默認(rèn)喚醒狀態(tài) false 的 ConditionHelper 實例的構(gòu)造函數(shù)。

ConditionHelper

public ConditionHelper(boolean isWakeup)

用于創(chuàng)建具有指定喚醒狀態(tài)的 ConditionHelper 實例的構(gòu)造函數(shù)。

參數(shù):

參數(shù)名稱 參數(shù)描述
isWakeup 指示要設(shè)置的喚醒狀態(tài)。 true表示線程被喚醒,false表示線程未被喚醒。

方法詳情

wakeup

public void wakeup()

喚醒當(dāng)前對象的線程并將其喚醒狀態(tài)設(shè)置為 true。

如果沒有調(diào)用resetCondition()重置喚醒狀態(tài),下次調(diào)用await()或await(long awaitMs)方法時會立即返回執(zhí)行結(jié)果。

resetCondition

public void resetCondition()

將喚醒狀態(tài)重置為 false,然后您可以調(diào)用 await()。

await

public void await()

掛起當(dāng)前線程,直到它被喚醒。

如果對象的喚醒狀態(tài)為 true,則立即返回該方法的執(zhí)行結(jié)果。

如果發(fā)生 java.lang.InterruptedException 異常,當(dāng)前線程繼續(xù)等待,直到被喚醒。 喚醒后,可以使用 Thread.currentThread().isInterrupted() 來檢查線程是否被中斷。

await

public boolean await(long awaitMs)

暫停當(dāng)前線程,直到它被喚醒或等待時間過去。

如果對象的喚醒狀態(tài)為 true,則立即返回該方法的執(zhí)行結(jié)果。

如果發(fā)生 java.lang.InterruptedException 異常,當(dāng)前線程繼續(xù)等待。 線程被喚醒或等待時間過去后,可以使用 Thread.currentThread().isInterrupted() 來檢查線程是否被中斷。

請注意,此方法無法確保精確的時序,因為它使用系統(tǒng)時鐘。 如果系統(tǒng)時鐘發(fā)生變化,可能會影響時序精度。

參數(shù):

參數(shù)名稱 參數(shù)描述
awaitMs 表示等待時間,以毫秒為單位。 如果此參數(shù)設(shè)置為 0,則線程保持等待。

返回:

如果線程等待被喚醒,則返回 true; 如果線程一直等到等待時間過去,則返回 false。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號