I have a very basic question. If a thread is busy in IO operation why it is not considered in a RUNNING state? If the IO operation is taking long time it means that the thread is doing its work. How can a thread be called BLOCKED when it is actually doing it's work?
I don't know where you read that a thread is in the BLOCKED state when doing IO. The BLOCKED state documentation says:
Thread state for a thread blocked waiting for a monitor lock. A thread in the blocked state is waiting for a monitor lock to enter a synchronized block/method or reenter a synchronized block/method after calling Object.wait.
So, no, a thread is not in a blocked state while doing IO (unless of course reading or writing forces it to wait on an object's monitor).
If you run the following code with a thread blocking on IO
public class Main {
public static void main(String[] args) throws InterruptedException {
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// blocking read
try {
System.in.read();
} catch (IOException e) {
throw new AssertionError(e);
}
}
});
thread.start();
for(int i=0;i<3;i++) {
System.out.println("Thread status: "+thread.getState());
Thread.sleep(200);
}
System.exit(0);
}
}
prints
Thread status: RUNNABLE
Thread status: RUNNABLE
Thread status: RUNNABLE
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With