Here is another possibility. Use a volatile flag to pass the message to C.
volatile boolean startC = false;
void B() {
// Do initial B work.
startC = true; // Set the volatile flag.
// Finish B processing not relevant to C.
}
void C() {
// Wait for B to progress far enough.
while (!startC) {
Thread.sleep(100);
}
// B has done enough work so we can begin.
}
This is not real code, just enough to give you the idea of what I am getting at. For example, you will need to pay attention to the visibility of the startC flag, or write a public getter and setter for it so B() and C() both have access.