Scenario 3 - Lastly, if main method starts, creates t1, acquires lock on sa, changes sa[0] to "Done" and then gets switched out of the CPU and the run method of t1 gets switched in for execution it will never be able to execute the line System.out.print(sa[1] + sa[2] + sa[3]); because that line occurs inside a block synchronized on sa and the lock for sa would be held by main at that point. The only time it would give up the lock would be after it exits its own synchronized block.