Соответствующие проверки if и else-if:
if (currentRunning == null && currentBlocked == null) {
...
}
else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
...
}
else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
...
}
Ваша первая проверка if будет проверять, что оба currentRunning
и currentBlocked
оба null
.
Если это не так, вы проверите, если currentBlocked
равно null
, и использование currentRunning.CPUburstRemaining
неявно означает, что currentRunning
не может быть null
(в противном случае было бы дано NullPointerException
).
После этих двух проверок мы знаем, что currentRunning
уже никогда не может быть null
, потому что он либо вошел бы в первое if
утверждение, либо дал бы NullPointerException
в currentRunning.CPUburstRemaining
в первый else if
-блок.
Из-за этого ваша && currentRunning == null
часть вашего else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null)
будет всегда быть фальшивой, поэтому IDE считает это мертвым кодом.