I have been reading Java Concurrency in Practice. I have seen one statement that says :
Liveness failure such as deadlock, livelock or starvation do not occur in single-threaded programs.
However, let us see an example. If single-threaded app makes I/O request before rendering view, and I/O request takes infinite time conceptually / theoretically. Single-thread app does make forward progress and blocks itself, eventually "nothing good happens".
My question is that is it just a proof that liveness failure may happen in single-threaded programs? Or I may have understood liveness failure wrong?