Я давно изучаю внутреннюю часть Java. Мне любопытно узнать и понять, как происходит многопоточность / блокировка в Java.
Таким образом, чтобы получить доступ к синхронизированному методу или синхронизированному блоку, поток должен сначала получить блокировку для объекта. Итак, вот что мне нужно немного больше света.
Итак, всякий раз, когда поток получает блокировку объекта, увеличивает ли он значение семафора внутри себя?
Если ответ «да», давайте посмотрим на этот сценарий.
class ABC{
public void method_1(){
synchronized(xyz){
....
}
}
public void method_2(){
...
synchronized(xyz){
....
}
}
}
Итак, скажем, есть два потока: Threaad 1 и Thread 2. Предполагая, что Thread1 сначала ввел method_1 и, следовательно, получил блокировку для xyz первым. И, скажем сейчас, Thread2 входит в method_2 и пытается получить блокировку на xyz. Что случится?
(Согласно мне, Thread2 будет заблокирован, поскольку он обнаружит, что значение семафора объекта> 0)
Дайте мне знать, если мои рассуждения верны.