На интервью Java он был задан с контекстом для потоков, есть класс ABC состоит из двух статических синхронизированных методов m1()
и m2()
, и есть две нитей T1
, T2
, если T1
берет блокировку метод m1()
затем в то же время это возможно для T2
взять замок на m2()
метод, я ответил, что, поскольку m1()
и m2()
статичны синхронизированы таким образом, они имеют блокировки на уровне класса, так что если T1
нить не получает блокировку на m1()
метод, то никакой другой поток может затормозить на m1()
в то же время, пока T1
не освободит замок от m1()
способ, но в то же время нить T2
можно сделать блокировку по методу m2()
, сообщите пожалуйста.Что касается блокировки уровня класса
ответ
One не приобретают замки на методы в Java, а на объектов. Синхронизированный статический метод неявно использует объект класса как блокировку. Естественно, что два метода в одном классе будут бороться за одну и ту же блокировку и не будут допущены к одновременному выполнению.
Wrong ... замок на синхронизированные блоках методы все другие синхронизированных методы вызывают
, так что вы хотите сказать, что если поток T1 занимает блокировку уровня класса по статическому синхронизированному методу m1(), то в то же время нить T2 не может блокировать другой статический синхронный метод m2(), поскольку Thread T1 установил блокировку уровня класса по методу m1(). n Вы могли бы показать небольшой пример, чтобы понять больше. Заранее спасибо. –
Да точно ... Я не могу дать более примерный пример, чем то, что написал. Просто попробуйте дополнить его, если хотите и хотите увидеть ... – jamp
Спасибо большое за прекрасное объяснение, не могли бы вы посоветовать любой пример, который показывает это, так что это поможет понять больше. Спасибо заранее. –