Well, B is the closest in terms of being correct, but it's poorly worded. Objects don't wait. Objects are passive things.
Threads execute object methods, or more appropriately, each java.lang.Thread object represents a
thread of execution in your application.
B should say something like "The thread executing wait() on an object will halt until another thread calls notify() or notifyAll() on that object ( or an InterruptedException is thrown).