那是我下面的代码
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,并且您将被卡住。