Как сгенерировать взаимоблокировку Java программно и как проанализировать взаимоблокировку

Опубликовано: 2013-07-03

Пример блокировки потока Java от Crunchify

Взаимоблокировка — это программная ситуация, когда два или более потока заблокированы навсегда, эта ситуация возникает как минимум с двумя потоками и двумя или более ресурсами.

Здесь я написал простую программу, которая вызовет сценарий взаимоблокировки, а затем мы посмотрим, как ее проанализировать.

Вот простой пример Java:

Выход:

Пока ваше приложение зависает, как в примере выше, вы можете получить дамп потока и увидеть заблокированные потоки.

Например, на Mac вы можете либо нажать Ctrl-\ , либо просто использовать jstack и идентификатор процесса, чтобы получить дамп потока, что делает очень очевидным, где находится взаимоблокировка.

В этом примере дамп потока выглядит так:

Замечено здесь, что threads => Deadlock здесь ситуация взаимоблокировки. В следующем примере будет представлена ​​простая программа Java для программного создания вышеуказанного дампа потока.