Though something this hard may not be on the exam it helps point out the need to have a plan for how you approach the exam questions. From the length of Corey's explanation, it is clear that this code is complicated. Handling the question from simple to hard issues lets you get through it the fastest, once you are sure you understand the basics of the code.
If it were an exam question, a simple read through renders options A & E as false, the linear path through the code establishes 23 will be printed before any thread starts. Second, since printing 24 and printing 21 are the next actions after the first thread starts, option C is impossible to determine because it will depend on the JVM scheduler.
Without even getting into the thread join behaviors, only two options are left, which can then be more easily validated.
On some questions, however, you do need to breakdown into a complete linear walkthrough tracking variable values, etc. before you can determine which answers are correct.