By entering in a synchronized block, the current
thread try to acquire a lock on the object referenced by sa.
But variables 'sa' in class A and 'sa' in class b are pointing to the same array object. (And not to a String object !).
So thread t1 has to wait for the main thread release the lock on the array.