Bloqueio é o processo pelo qual um thread é temporariamente suspenso da execução porque está aguardando a ocorrência de um determinado evento. Isso pode acontecer por vários motivos, como: 
 * 
Aguardando E/S: Um thread pode ser bloqueado enquanto espera que os dados sejam lidos ou gravados em um arquivo ou que uma conexão de rede seja estabelecida. 
 * 
Aguardando um bloqueio: Um thread pode ser bloqueado enquanto espera que outro thread libere um bloqueio em um recurso. 
 * 
Aguardando uma variável de condição: Um thread pode ser bloqueado enquanto espera que uma variável de condição seja sinalizada.  
 O bloqueio é uma parte importante da sincronização de threads, pois garante que os threads não acessem recursos compartilhados ao mesmo tempo. No entanto, o bloqueio também pode levar a conflitos, que ocorrem quando dois ou mais threads estão esperando um pelo outro para liberar bloqueios.  
 Para evitar impasses, é importante projetar cuidadosamente os mecanismos de sincronização de threads. Uma maneira de fazer isso é usar algoritmos sem bloqueios, que não requerem threads para adquirir bloqueios. Outra maneira é usar um algoritmo de detecção de impasses, que pode detectar e resolver impasses quando eles ocorrerem.