那是我下面的代码

class SecondTextViewTask extends Thread {
        @Override
        public void run() {
            while (true) {
                if (semaphore.availablePermits() == 0 && firstTextDigit <= 9 && secondTextDigit <= 9) {
                    try {
                        Thread.sleep(1000);

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                secondTextDigit++;
                                secondDigit.setText(String.valueOf(secondTextDigit));
                                Log.e("Test== ", "" + secondTextDigit + " " + semaphore.availablePermits());
                                if (secondTextDigit == 9) {
                                    semaphore.release();
                                }
                            }
                        });

                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

首先,我从0开始启动信号量,在secondTextDigit(integer)到达9信号量释放之后,此任务必须停止。但是当我使用Log.e时,我可以在Logcat上看到secondTextDigit = 10和我的semaphore = 1。在这种情况下,语句如何工作并进入内部?我的逻辑错误在哪里?
(secondDigit是TextView。)

最佳答案

您的初始if语句对此进行了检查:

semaphore.availablePermits() == 0 && firstTextDigit <= 9 && secondTextDigit <= 9

这可以对secondTextDigit == 9有效。

然后,您调用secondTextDigit++。如果为secondTextDigit == 9,则secondTextDigit变为10。

最后,释放信号量的条件是secondTextDigit == 9,如果secondTextDigit为10,则该条件将为false,并且您将被卡住。

09-27 15:34