您如何处理 Java 线程的重复调用?

How do you handle duplicate calls of Java threads?

private int limitTime = 10;
void timer() {
    limitTime = 10;
    Thread thread = new Thread() {
        @Override
        public void run() { 
            stop = false;
            while(!stop) {
                System.out.println("Time >> " + limitTime);
                //Platform.runLater(()->{
                    lbLimitTime.setText(Integer.toString(limitTime));
                    limitTime -= 1;
                //});   
                    if(limitTime < 1) stop = true;
                try { Thread.sleep(1000); } catch (InterruptedException e) {}
            }
        };
    };
    thread.setDaemon(true);
    thread.start(); 
}

我们正在使用 JavaFX 创建 GUI 程序。

我尝试将每次点击的计时器设置为 10 秒。

如果通过点击 10 秒前复制定时器功能,时间将快一倍。

你觉得我哪里没听懂?

每当点击发生时调用定时器函数。

当点击发生时,我想初始化已有的定时器,正常流1秒

对于您的用例,使用 Thread 不是一个好主意,请使用 TimerTaskjava.util.Timer

// class wide variables
TimerTask timerTask;
Timer timer = new Timer("myTimer");
int limitTimer = 10;

public TimerTask createTask() {
    limitTimer = 10;
    return new TimerTask() {
        @Override
        public void run() {
            System.out.println("Time>> " + limitTime);
            limitTime--;
            if (limitTime <= 0) {
                cancel();
            }
        }
    }
}

void click() {
   if (timerTask != null) {
      timerTask.cancel();
   }

   timerTask = createTask();
   timer.scheduleAtFixedRate(timerTask, 0, 1000);
}

调用click方法时,会取消旧定时器,启动新定时器。

注意limitTimer 变量不是线程安全的,因此如果您在其他地方更新它,可能会导致奇怪的行为。