首先, 要了解在方法上加synchronized 到底意味着什么.
方法上加了synchronized, 表示, 当着个方法被调用的时候, 其他所有的synchronized 的方法, 都会等待.
所以, 当check方法返回true的时候, 只会有一种情况, 就是不同的线程几乎同时调用了 setXY() 这个没有加synchronized 的方法.
进入这个方法之后, 还刚好 第一个线程 调用了 setX() 第二个线程会等待, 然后  要么第一个线程进入setY(), 要么第二个线程进入setX, 这样才会让x和y出现不一致的值的情况.
最关键的还是刚才说的.. 当synchronized 方法被调用的时候, 其他的所有synchronized 方法都会等待... 才导致了有这个时间差..
而且必须在这个时间差里调用check 才会返回true...
最后, 来看选项..
A.. 明显错误
B. 正确
C. setX 和 setY 是private方法........ 所以外部调用不了 , 所以错误
D.分别设置x和y确实是一个可以让check返回true的方法, 但经过上面的分析.. 表示不是唯一的方法.. 所以也错误..
大概就是这样了吧....