O que é um monitor referido na programação simultânea em Java?
Quando li que "todo objeto associou um monitor", o que isso significa?
É um objeto especial?
O que é um monitor referido na programação simultânea em Java?
Quando li que "todo objeto associou um monitor", o que isso significa?
É um objeto especial?
Respostas:
Um monitor é um mecanismo para controlar o acesso simultâneo a um objeto.
Isso permite que você faça:
Tópico 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Tópico 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Isso impede que os segmentos 1 e 2 acessem a seção monitorada (sincronizada) ao mesmo tempo. Um será iniciado e o monitor impedirá que o outro acesse a região antes que o primeiro termine.
Não é um objeto especial. É do mecanismo de sincronização colocados a classe hierarquia raiz: java.lang.Object
.
Há também wait
e notify
métodos que também vai usar o Monitor do objeto para a comunicação entre os diferentes tópicos.
Class
objeto correspondente para métodos estáticos. Se você já possui um método sincronizado1 () e declara o método2 () sincronizado, nenhum novo monitor é criado e, na verdade, a invocação de qualquer método (no mesmo objeto) tentará bloquear o mesmo monitor. Isso geralmente chama a atenção dos recém-chegados.
Um monitor é uma entidade que possui um bloqueio e um conjunto de espera . Em Java, qualquer um Object
pode servir como um monitor.
Para uma explicação detalhada de como os monitores funcionam em Java, recomendo a leitura da seção Mecânica do Monitor da Programação Simultânea em Java (o link anterior exibe a visualização nos livros do Google, e essa seção está disponível para leitura).
Wakes up all threads that are waiting on this object's monitor.
sobre notifyall (), o que eu recebo é que o objeto está mantendo (com a ajuda da entidade / objeto interno) o que todos os threads estão esperando pelo bloqueio, essa entidade / objeto interno é chamado de monitor?
A linguagem Java e o sistema de tempo de execução suportam a sincronização de threads através do uso de monitores.
Um monitor está associado a um item de dados específico (uma variável de condição) e funciona como um bloqueio nesses dados. Quando um segmento retém o monitor para algum item de dados, outros segmentos são bloqueados e não podem inspecionar ou modificar os dados.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Um mecanismo para controlar o acesso aos objetos, um de cada vez
Monitor é uma construção de sincronização que permite que os threads tenham exclusão mútua e a capacidade de aguardar (bloquear) que uma determinada condição se torne verdadeira.
Os monitores também têm um mecanismo para sinalizar para outros segmentos que suas condições foram atendidas. É uma entidade que possui um bloqueio e um conjunto de espera. Em Java, qualquer objeto pode servir como um monitor.
Na máquina virtual Java, todos os objetos e classes são associados logicamente a um monitor. Para implementar o recurso de exclusão mútua de monitores, um bloqueio (às vezes chamado de mutex) é associado a cada objeto e classe. Isso é chamado de semáforo em termos de sistemas operacionais, mutex é um semáforo binário.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
o monitor é associado ao objeto ou membro de dados, que é adquirido quando um membro ou objeto de dados é inserido no bloco de sincronização (seção crítica) e liberado quando é encerrado.