A simple wait() notify() would have to be modified with some signals to make sure the proper order is conserved. Here is an example:
Other options would be to have C lock on a different object then A. B initially locks on the same one A is using and wait()s. A notify()s B, B does its work, then synchronizes on the same Object as C and notify()s it. This can be a bit tricky to implement though, you have to be sure all your data you are protecting are properly protected with the double locks, and that you don't get into a deadlock situation.
However, if your target app is at
Java 1.5 or later,
you should probably take advantage of the java.util.concurrent.Lock/Condition classes. Look up the tutorial for Concurrency in Java and you will see example usage.
/*** Edit ***/
The notify()s should be notifyAll()s, changed in above code