Ответ
При вызове notify() без явного указания порядка, JVM не гарантирует, какой из ожидающих потоков будет разбужен. Выбор произволен и зависит от реализации JVM.
Если важно разбудить конкретный поток, можно использовать notifyAll(), который разбудит все ожидающие потоки, и они будут конкурировать за монитор (с учётом приоритетов и планировщика потоков).
Пример:
synchronized (lock) {
lock.notify(); // случайный поток
// или
lock.notifyAll(); // все потоки
}