Java 传递参数以在scheduleWithFixedDelay中运行函数
使用executor.scheduleWithFixedDelay调用时,如何在run方法中传递函数 例如Java 传递参数以在scheduleWithFixedDelay中运行函数,java,multithreading,executorservice,Java,Multithreading,Executorservice,使用executor.scheduleWithFixedDelay调用时,如何在run方法中传递函数 例如 那么,在这个例子中,我如何将参数传递给runOnce。例如,如果我想发送I?您希望this::runOnce基于I返回一个Runnable,因此如果您希望一个Runnable只需将I输出到控制台,则该类将如下所示: public class Blah { public void whatever() { ScheduledExecutorService sched
那么,在这个例子中,我如何将参数传递给runOnce。例如,如果我想发送I?您希望
this::runOnce
基于I
返回一个Runnable
,因此如果您希望一个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);
}
}
无论
runOnce
返回什么,您都可以将方法引用更改为lambda,并将i
作为参数传入:
IntStream.range(0, 4).forEach(i -> {
executor.scheduleWithFixedDelay(() -> runOnce(i), 0, 5000, TimeUnit.MILLISECONDS);
});
是的,很好用。()->runOnce(i)在做什么?@hatellla这是一个lambda,是
Runnable
的语法糖,它的run
方法调用runOnce
方法,并将i
作为参数。如果我不想返回任何东西,我不能只返回System.out.println(i);而不是()->System.out.println(i);?
IntStream.range(0, 4).forEach(i -> {
executor.scheduleWithFixedDelay(() -> runOnce(i), 0, 5000, TimeUnit.MILLISECONDS);
});