gpt4 book ai didi

java - 使用计划执行器生成一个新的随机数,然后将该数字作为 Java 中的新时间间隔传递

转载 作者:行者123 更新时间:2023-12-01 16:30:10 24 4
gpt4 key购买 nike

早上好,

我想启动一个计划线程,该线程每次执行时都会生成一个新的随机数,然后使用该新数字作为再次触发之前的间隔。我之前使用过大致以下代码来执行按定期计划的时间间隔运行的线程:

public void start() {

long delay = 5;

final Runnable g = () -> {
delay = (long)(50 * (Math.random()+0.1));
thingDoer.doAwesomeThings();
};
final ScheduledFuture<?> passerbyGenerator = schedule.scheduleAtFixedRate(g, 1, delay,
TimeUnit.MILLISECONDS);
}

我从来没有尝试过在没有固定间隔的情况下这样做。我知道我上面的方法行不通。首先,最后一行代码设置了时间表,并且只执行一次。其次,看起来我无法在计划线程内使用变化的变量。我收到以下错误:“封闭范围中定义的局部变量延迟必须是最终的或实际上是最终的。”

如何启动一个线程来执行我想做的事情?换句话说,如何安排蜂鸣器以不规则的间隔发出蜂鸣声?

最佳答案

public class ThingDoer implements Runnable {

private long delay;

public ThingDoer(int initialDelay) {
this.delay = initialDelay;
}

public static void main(String[] args) {

new Thread(new ThingDoer(5)).start();

}

@Override
public void run() {
while (true) {
try {
Thread.sleep(delay);
delay = (long) ((Math.random() + 0.1) * 50);

doAwesomeThings();
System.out.println(String.format("next delay: %s", delay));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public void doAwesomeThings() {
System.out.println("did something awesome");
}

}

实际输出:

did something awesome
next delay: 31
did something awesome
next delay: 12
did something awesome
next delay: 48
did something awesome
next delay: 31
did something awesome
next delay: 44
did something awesome
next delay: 20
did something awesome
next delay: 26
did something awesome
next delay: 18
did something awesome
next delay: 39
did something awesome
next delay: 32

关于java - 使用计划执行器生成一个新的随机数,然后将该数字作为 Java 中的新时间间隔传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62061285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com