Como gerar Java Deadlock programaticamente e como analisar Deadlock

Publicados: 2013-07-03

Exemplo de bloqueio de thread Java por Crunchify

Deadlock é uma situação de programação onde dois ou mais threads são bloqueados para sempre, esta situação surge com pelo menos dois threads e dois ou mais recursos.

Aqui eu escrevi um programa simples que causará um cenário de deadlock e então veremos como analisá-lo.

Aqui está um exemplo simples de Java:

Saída:

Enquanto seu aplicativo está travando como no exemplo acima, você pode obter um despejo de thread e ver os threads bloqueados.

Por exemplo, no Mac, você pode fazer Ctrl-\ ou simplesmente usar jstack e process id para obter o despejo de encadeamento, o que torna muito óbvio onde está o impasse.

Neste exemplo, o dump de encadeamento se parece com isso:

Notificado aqui BLOCKED and WAITING threads => Deadlock aqui .. No próximo exemplo, fornecerá um programa Java simples para gerar o dump de thread acima programaticamente.