When a thread blocks on I/O, it leaves the ready/runnable state and enters a waiting state until the I/O operation completes. It does NOT enter dead state (that's for terminated threads). Other threads CAN perform I/O concurrently - I/O blocking is per-thread, not system-wide. The thread returns to ready state when I/O completes.