簡體   English   中英

我們可以為Java接口實施超時嗎?

[英]Can we enforce timeout for java interface implementation?

我正在基於Java的游戲服務器上工作。 我在服務器端的設計如下。
RuleEnforcer在IPlayers列表中傳遞,並啟動與播放器的通信。 IPlayers是一個接口,我想實現一個用於測試目的的虛擬播放器,一個“智能”播放器以及一個最終與遠程客戶端UI界面進行交互的播放器。 在RuleEnforcer中,調用播放器方法時,需要確保該方法(按時)返回。 例如:

for(player : players) {
    player.giveAcard(card);
}

GiveACard沒有返回類型,每個玩家只需要保存卡並立即返回即可。 但是,如果玩家實現在方法調用上處於休眠狀態,則游戲將停滯不前。 如何在我的代碼中說明呢? 我能想到的一種方法是在另一個線程中調用玩家交互,然后使用等待。 是否有適用於此方案的設計,還是我的方法錯誤?

是的,您可以通過這種方式創建。 創建一個構造函數

SimpleTimeLimiter()

使用Executors.newCachedThreadPool()構造一個TimeLimiter實例以執行代理方法調用。 使用新代理的方法詳細信息。

public <T> T newProxy(T target,
             Class<T> interfaceType,
             long timeoutDuration,
             TimeUnit timeoutUnit)

然后超時通話...

callWithTimeout
public <T> T callWithTimeout(Callable<T> callable,
                    long timeoutDuration,
                    TimeUnit timeoutUnit,
                    boolean amInterruptible)

供參考...新代理

public <T> T newProxy(T target,
             Class<T> interfaceType,
             long timeoutDuration,
             TimeUnit timeoutUnit)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM