Мертвая блокировка возникает только при наличии нескольких блокировок.
В этом случае func2
и func1
синхронизируются на одном и том же мониторе lock
(экземпляр TestClass
).Как только поток получит эту блокировку, другие потоки будут заблокированы, пока она не снимет блокировку.
Предположим, main thread
ввел func1
, что означает, что он получил блокировку, другие потоки не могут одновременно вызывать func2
.Потому что fun1
и fun2
работают с одной и той же блокировкой!И в fun1
этот поток может вызвать fun2
, потому что блок synchronized
является повторно входящим.