将参数传递给 scheduleWithFixedDelay 中的 运行 函数

Pass an argument to run function in scheduleWithFixedDelay

如何在使用 executor.scheduleWithFixedDelay

调用时在 运行 方法中传递函数

例如。

IntStream.range(0, 4)
.forEach(
    i -> executor.scheduleWithFixedDelay(this::runOnce, 0, 5000, TimeUnit.MILLISECONDS));

那么,在这种情况下,我如何将参数传递给 运行Once。例如。如果我想发送 i?

你想要 this::runOnce 到 return 基于 iRunnable 所以如果你想要一个可运行的简单地输出 i 到控制台 class 看起来像:

public class Blah {

    public void whatever() {
        ScheduledExecutorService scheduledExecutorService =
            Executors.newScheduledThreadPool(5);
        IntStream.range(0, 4).forEach(i -> {
            scheduledExecutorService.scheduleWithFixedDelay(runOnce(i),
                0, 5000, TimeUnit.MILLISECONDS);
        });
    }

    private Runnable runOnce(int i) {
        return () -> System.out.println(i);
    }
}

不管 runOnce returns 是什么,您都可以将方法引用更改为 lambda 并传入 i 作为参数:

IntStream.range(0, 4).forEach(i -> { 
    executor.scheduleWithFixedDelay(() -> runOnce(i), 0, 5000, TimeUnit.MILLISECONDS);
});