В этом простом примере у меня есть два synchronized (theLock)
, к которым обращаются разные потоки
public class Main {
public static void main(String[] args) throws InterruptedException {
System.out.println("start");
final Object theLock = new Object();
synchronized (theLock) {
System.out.println("main thread id : " + Thread.currentThread().getId());
new Thread(() -> {
System.out.println("new thread id : " + Thread.currentThread().getId() + ". Inside thread");
// before entering this section new thread should be blocked as `theLock` is already acquired
synchronized (theLock) {
System.out.println("inside synchronized");
theLock.notify();
}
}).start();
theLock.wait();
}
System.out.println("end");
}
}
Почему недавно созданный поток может получить доступ к разделу synchronized (theLock)
внутри?Насколько я понимаю, theLock
уже получен основным потоком, а новый должен блокироваться навсегда.Вместо этого я вижу, что это также входит в synchronized
.
Вот вывод
start
main thread id : 1
new thread id : 13. Inside thread
inside synchronized
end