执行程序连续执行两次

时间:2016-09-11 10:52:43

标签: java multithreading javafx thread-safety

我有一个用于计算持续时间的线程执行程序:

private ScheduledExecutorService updateTime = Executors.newSingleThreadScheduledExecutor();

它是基于布尔属性执行的,如果用户按下按钮,该布尔属性只会被更改一次:

gameStarted.addListener((e) -> {updateTime.scheduleAtFixedRate(this::calculateDuration, 1, 1, TimeUnit.SECONDS);});

但它的速度是应该的两倍,实际上当我向System.out.println(Thread.currentThread().getName());方法添加calculateDuration时,我看到同一个线程(pool-2-thread-1)每次都有两次。

更奇怪的是,如果我删除监听器并启动执行程序,如下:

updateTime.scheduleAtFixedRate(this::calculateDuration, 1, 1, TimeUnit.SECONDS);

然后它以正确的速率运行,线程每次进入方法一次,但我必须使用触发器来启动执行程序,因为它不应该在游戏开始之前运行。

执行者跑两倍的原因是什么原因?

0 个答案:

没有答案