下面是我的代码
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 上看到。在这种情况下,if 语句如何工作并进入内部?我的逻辑错误在哪里?
(secondDigit 是 TextView。)
最佳答案
您的初始 if
语句会检查以下内容:
semaphore.availablePermits() == 0 && firstTextDigit <= 9 && secondTextDigit <= 9
这对 secondTextDigit == 9
有效。
然后调用 secondTextDigit++
。如果 secondTextDigit == 9
,则 secondTextDigit
变为 10。
最后,您释放信号量的条件是 secondTextDigit == 9
,如果 secondTextDigit
为 10,则该条件为 false,您会卡住。
关于java - 我无法用 if 语句停止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49793881/