我无法用 if 语句停止线程
I couldn't stop thread with if statement
下面是我的代码
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 和我的信号量=1 上看到。在这种情况下,if 语句如何工作并进入内部?我的逻辑错误在哪里?
(secondDigit 是 TextView。)
您最初的 if
声明检查了这一点:
semaphore.availablePermits() == 0 && firstTextDigit <= 9 && secondTextDigit <= 9
这对secondTextDigit == 9
有效。
然后您调用 secondTextDigit++
。如果 secondTextDigit == 9
,则 secondTextDigit
变为 10。
最后,你释放信号量的条件是secondTextDigit == 9
,如果secondTextDigit
是10,它就会是假的,你就卡住了。
下面是我的代码
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 和我的信号量=1 上看到。在这种情况下,if 语句如何工作并进入内部?我的逻辑错误在哪里?
(secondDigit 是 TextView。)
您最初的 if
声明检查了这一点:
semaphore.availablePermits() == 0 && firstTextDigit <= 9 && secondTextDigit <= 9
这对secondTextDigit == 9
有效。
然后您调用 secondTextDigit++
。如果 secondTextDigit == 9
,则 secondTextDigit
变为 10。
最后,你释放信号量的条件是secondTextDigit == 9
,如果secondTextDigit
是10,它就会是假的,你就卡住了。