Java中的javascript setTimeout相当于什么?

我需要实现一个函数,以便在单击按钮60秒后运行。请帮忙,我使用了Timer类,但我认为这不是最好的方法。


答案 1

使用 JDK 1.8 的异步实现:

public static void setTimeout(Runnable runnable, int delay){
    new Thread(() -> {
        try {
            Thread.sleep(delay);
            runnable.run();
        }
        catch (Exception e){
            System.err.println(e);
        }
    }).start();
}

使用 lambda 表达式进行调用:

setTimeout(() -> System.out.println("test"), 1000);

或使用方法参考:

setTimeout(anInstance::aMethod, 1000);

要处理当前正在运行的线程,只需使用同步版本:

public static void setTimeoutSync(Runnable runnable, int delay) {
    try {
        Thread.sleep(delay);
        runnable.run();
    }
    catch (Exception e){
        System.err.println(e);
    }
}

在主线程中谨慎使用 - 它将在调用后暂停所有内容,直到过期并执行。timeoutrunnable


答案 2

使用Java 9 CompletableFuture,每个简单:

CompletableFuture.delayedExecutor(5, TimeUnit.SECONDS).execute(() -> {
  // Your code here executes after 5 seconds!
});