Well the question asked "In which of the following cases a thread will
definitely be alive but not be running "
There are certain things you can *definitely* predict about thread behavior, and there are others that you cannot.
You cannot make predictions about yield(), for the same reasons that answer c is not correct.
You should think of yield() the same way you think of System.gc();...it's a
suggestion to the JVM. There's no guarantee it will actually perform the requested action.
When you call yield(), you are saying to the JVM "Hey Mr. BoJangles (I refer to my JVM as Mr. BoJangles), this thread doesn't really need to be executed right now, so if you want to give it to another thread that might have something more important to do, go ahead, I don't mind."
That's all you are doing when you call yield(). There is no guarantee that the JVM will then actually pause your thread and cause another one to run. So you can't say the thread is
definately not running after you call yield(). That's why answer e is not correct.