我们可以强制执行java接口的超时吗?

时间:2015-03-04 13:21:43

标签: java

我正在使用基于java的游戏服务器。我在服务器端的设计如下 RuleEnforcer在IPlayers列表中传递,并启动与玩家的通信。 IPlayers是一个接口,我想实现一个虚拟播放器用于测试目的,一个" smart"播放器,以及最终与远程客户端UI界面交互的播放器。在RuleEnforcer中调用player方法时,需要确保该方法返回(按时)。例如:

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

giveACard没有返回类型,每个玩家只需要保存卡并立即返回。但是如果玩家实现在方法调用上休眠,游戏就会被卡住。 我如何在我的代码中考虑到这一点?我能想到的一种方法是在不同的线程中调用玩家交互,并使用等待。是否有适用于此场景的设计,或者我的方法是否错误?

1 个答案:

答案 0 :(得分:3)

是的,你可以通过这种方式创造。 创建一个构造函数

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)