Передайте аргумент для запуска функции в scheduleWithFixedDelay - PullRequest
0 голосов
/ 08 января 2019

Как передать функцию в метод run при вызове с использованием executor.scheduleWithFixedDelay

Например.

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

Итак, как я могу передать аргумент в runOnce. Например. если бы я хотел отправить я?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Независимо от того, что возвращает runOnce, вы можете изменить ссылку на метод на лямбду и передать в качестве аргумента i:

IntStream.range(0, 4).forEach(i -> { 
    executor.scheduleWithFixedDelay(() -> runOnce(i), 0, 5000, TimeUnit.MILLISECONDS);
});
0 голосов
/ 08 января 2019

Вы хотите, чтобы this::runOnce возвращал Runnable на основе i, поэтому, если вы хотите, чтобы runnable просто выводил i на консоль, класс выглядел бы так:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...