2013-04-11 4 views
-1

На интервью Java он был задан с контекстом для потоков, есть класс ABC состоит из двух статических синхронизированных методов m1() и m2(), и есть две нитей T1, T2, если T1 берет блокировку метод m1() затем в то же время это возможно для T2 взять замок на m2() метод, я ответил, что, поскольку m1() и m2() статичны синхронизированы таким образом, они имеют блокировки на уровне класса, так что если T1 нить не получает блокировку на m1() метод, то никакой другой поток может затормозить на m1() в то же время, пока T1 не освободит замок от m1() способ, но в то же время нить T2 можно сделать блокировку по методу m2(), сообщите пожалуйста.Что касается блокировки уровня класса

ответ

1

One не приобретают замки на методы в Java, а на объектов. Синхронизированный статический метод неявно использует объект класса как блокировку. Естественно, что два метода в одном классе будут бороться за одну и ту же блокировку и не будут допущены к одновременному выполнению.

+0

Спасибо большое за прекрасное объяснение, не могли бы вы посоветовать любой пример, который показывает это, так что это поможет понять больше. Спасибо заранее. –

2

Wrong ... замок на синхронизированные блоках методы все другие синхронизированных методы вызывают

+0

, так что вы хотите сказать, что если поток T1 занимает блокировку уровня класса по статическому синхронизированному методу m1(), то в то же время нить T2 не может блокировать другой статический синхронный метод m2(), поскольку Thread T1 установил блокировку уровня класса по методу m1(). n Вы могли бы показать небольшой пример, чтобы понять больше. Заранее спасибо. –

+0

Да точно ... Я не могу дать более примерный пример, чем то, что написал. Просто попробуйте дополнить его, если хотите и хотите увидеть ... – jamp