首页 > 解决方案 > Java 在线程终止后检查特定条件

问题描述

我有以下代码

    PlayerMove move;
    Thread t = new Thread(new Timer());
    t.start();
    move = this.currentPlayer.GetPlayerMove();

如何在线程 t 终止后检查移动变量是否为空?

标签: javamultithreading

解决方案


我的猜测是你想要的是这样的:

CompletableFuture<PlayerMove> moveFuture = supplyAsync(currentPlayer::getPlayerMove);

try {
    PlayerMove move = moveFuture.get(limit, TimeUnit.MILLISECONDS);
    // player moved
} catch (TimeoutException e) {
    // player did not move
}

CompletableFuture是一个接口,表示在单独的线程中计算的结果(在这种情况下,调用 currentPlayer.getPlayerMove())。您可以通过调用get()which 将永远等待或(如在本例中)指定时间段来检索结果。如果超时时间已过,TimeoutException则抛出 a。


推荐阅读