Правильный ответ: 2. Почему: это не многопоточная программа. Мы создаем объект типа Thread, но не запускаем его с помощью метода start. Вместо этого основной поток вызывает метод run экземпляра Thread, который выполняется синхронно в основном потоке. Так как одному объекту разрешено повторно получать один и тот же монитор, основной поток получает монитор на BlackWhite.class, когда метод run вызывает метод printBlack. Чтобы запустить новый поток, нужно вызвать метод start класса Thread. Если в программе заменить t.run на t.start, то программа всегда будет печатать "WhiteBlack", так как новый поток не сможет приступить к выполнению, пока главный поток не завершится и не отпустит блокировку.



Что прочитать: у Шилдта про многопоточное программирование. Здесь я описывал его книгу https://t.me/java_developer/48



Что загуглить: запуск нового потока, synchronized на статическом методе