Java 如何强制while循环一次执行一个runnable。

Java 如何强制while循环一次执行一个runnable。,java,android,multithreading,Java,Android,Multithreading,我试着在每次重复之后制作一个时间间隔不均匀的简单计时器 我的发言如下: case R.id.start: timerRuns = true; startCycle(); break; 循环本身如下所示: private void startCycle() { pomodoroLeft = numPomodoro; while(pomodoroL

我试着在每次重复之后制作一个时间间隔不均匀的简单计时器

我的发言如下:

            case R.id.start:
                timerRuns = true;
                startCycle();
                break;
循环本身如下所示:

private void startCycle() {
        pomodoroLeft = numPomodoro;
        while(pomodoroLeft > 0) {
            pomodoroLeft--;
            actualSeconds = pomodoroLength * ONE_MINUTE;
            setTimeAndRun(actualSeconds);
            actualSeconds = shortLength * ONE_MINUTE;
            setTimeAndRun(actualSeconds);


        }
    }
方法调用:

 private void setTimeAndRun(long timePeriod) {
        runTime = timePeriod;
        runnable.run();
    }
最后是runnable本身:

private Runnable runnable = new Runnable()
    {

        public void run() {

            if (timerRuns) {
                runTime -= ONE_SECOND;
                String str = String.format("%1$02d : %2$02d",
                        TimeUnit.MILLISECONDS.toMinutes(runTime),
                        TimeUnit.MILLISECONDS.toSeconds(runTime) -
                                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(runTime))
                );
                timeShown.setText(str);

                mHandler.postDelayed(this, 1000);
                if(timeShown.getText().toString().contentEquals("00 : 00")) {
                    stopClock();
                    //here goes the alarm.
                }
            }

        }
    };
我的问题是,当我启动计时器时,while循环似乎会执行所有操作 上一个方法调用的不完整run()。因此,timeShown TextView立即显示此
actualSeconds=shortLength*1_MINUTE
,每秒跳过1秒,因为2个runnables同时运行

我想在这里实现顺序执行。这样做的最佳方式是什么?也许实现非匿名子类并每次实例化它会有所帮助


此外,如果您有任何其他的建议,可以改进我的代码,我将不胜感激

您应该看看队列

下面是一个类似问题的链接:

您应该使用Executors.newSingleThreadExecutor()

以下是关于执行者的教程:

以下内容可能有助于您更好地理解java中的多线程:


希望这能有所帮助。

我不认为
postDelayed(这,…)
会导致
run()
方法停止。它尝试将同一
Runnable
的第二次执行安排在1秒后,但第一次
run()
继续执行,并很快返回调用方。不幸的是,我不太熟悉如何在Android上做这类事情,所以我最好让其他人想出解决方案。