Programação simultânea em Java wait (), notify () e notifyAll ()

O Java possui um mecanismo de espera interno para permitir que os encadeamentos não funcionem enquanto aguarda sinais. A classe java.lang.Object define três métodos, wait (), notify () e notifyAll () para implementar esse mecanismo de espera.

Depois que um thread chama o método wait () de qualquer objeto, ele fica em um estado não em execução até que outro thread chame o método notify () do mesmo objeto. Para chamar wait () ou notify (), o encadeamento deve primeiro adquirir o bloqueio nesse objeto. Ou seja, o encadeamento deve chamar wait () ou notify () no bloco de sincronização.

wait: indica que o encadeamento A que mantém o bloqueio de objeto está pronto para liberar a permissão de bloqueio de objeto, liberar recursos da CPU e inserir wait.
notificar : indica que o encadeamento A que mantém o bloqueio do objeto está pronto para liberar a permissão do bloqueio do objeto e informa a jvm para ativar um encadeamento X competindo pelo bloqueio do objeto. Depois que o escopo de código sincronizado do encadeamento termina, o encadeamento X obtém diretamente a permissão de bloqueio do objeto e outros encadeamentos concorrentes continuam aguardando (mesmo se o encadeamento X estiver sincronizado e o bloqueio do objeto for liberado, outros encadeamentos concorrentes ainda esperam até que uma nova notificação, notifyAll seja chamada).
notifyAll: indica que o encadeamento A que mantém o bloqueio de objeto está pronto para liberar a permissão de bloqueio de objeto e informa a jvm para ativar todos os encadeamentos que competem pelo bloqueio de objeto.Depois que o escopo do código sincronizado do encadeamento A, a jvm atribui a permissão de bloqueio de objeto a um encadeamento X através do algoritmo Todos os threads despertados não esperam mais. Depois que o escopo do código sincronizado do encadeamento X termina, é provável que todos os encadeamentos acordados anteriormente obtenham a permissão de bloqueio de objeto, que é determinada pelo algoritmo da JVM.

Exemplos:

 

Nota: este artigo é original e não pode ser reproduzido em nenhuma plataforma sem permissão. Se você precisar reimprimir,
entre em contato com o autor ~ siga o número público do WeChat: campo de treinamento do conhecimento, você pode se comunicar com o Java qun: 16844592, para obter mais informações ~

Acho que você gosta

Origin www.cnblogs.com/bootcamp/p/12738251.html
Recomendado
Clasificación