O conceito básico de sincronização no monitor Java - a maneira mais simples e grosseira de entender

Há um curso chamado Sistema Operacional na universidade. Os alunos que o estudaram devem lembrar que o monitor é um conceito básico importante para a sincronização do sistema operacional. Ele também é usado na sincronização de threads de JAVA. Este artigo usa uma analogia para explicar o monitoramento. "Monitor".

1. O que é um monitor

O monitor pode ser considerado um edifício especialmente arranjado Este edifício possui uma sala especial que geralmente contém alguns dados e códigos, mas apenas um consumidor (thread) pode usar esta sala por vez.

Insira a descrição da imagem aqui Quando um consumidor (thread) usa esta sala, ele deve primeiro ir a um lobby (Entry Set) para esperar. O agendador irá selecionar um consumidor (thread) do lobby com base em certos critérios (por exemplo, FIFO) e entrar na sala especial Se este tópico for "suspenso" por algum motivo, ele será agendado para a "sala de espera" pelo agendador, e será transferido para uma sala especial após um período de tempo. De acordo com a linha acima, este prédio contém três salas , Respectivamente são "sala especial", "sala" e "sala de espera".

Insira a descrição da imagem aqui Em termos simples, o monitor é usado para monitorar threads que entram nessa sala especial, garantindo que apenas uma thread possa acessar os dados e o código na sala especial por vez.

2. Realização de monitor em JAVA

Na máquina virtual JAVA, cada objeto (objeto e classe) está associado ao monitor por meio de uma certa lógica. Para realizar a função de exclusão mútua do monitor, cada objeto (objeto e classe) é associado a um bloqueio (às vezes chamado de "mútuo Exclusão "), esse bloqueio é chamado de" semáforo "nos livros do sistema operacional, a exclusão mútua (" mutex ") é um semáforo binário.

Se um encadeamento mantém um bloqueio para alguns dados, outros encadeamentos não podem adquirir o bloqueio até que o encadeamento libere o bloqueio. No multithreading, se escrevermos esse semáforo nós mesmos a qualquer momento, obviamente não será muito conveniente.Felizmente, a JVM implementa isso automaticamente para nós.

Para evitar que os dados sejam acessados ​​por vários encadeamentos, Java fornece duas implementações: bloco de sincronização e método de sincronização. Uma vez que um trecho de código é incorporado em uma palavra-chave synchronized, isso significa que ele é colocado na área de monitoramento e a JVM fornecerá automaticamente esse segmento em segundo plano. O código implementa a função de bloqueio.

3. Qual parte do código de sincronização JAVA é o monitor?

Sabemos que cada objeto (Objeto / classe) de JAVA está associado a um monitor.É melhor dizer que cada objeto (Objeto / classe) possui um monitor.O objeto pode ter sua própria seção crítica e pode monitorar threads. Sequência Para fazer com que os encadeamentos cooperem, JAVA fornece wait () e notificaçãoAll e notificar () para suspender o encadeamento e ativar outro encadeamento em espera. Além disso, existem três versões diferentes desses métodos:

wait(long timeout, int nanos)
wait(long timeout) notified by other threads or notified by timeout.
notify(all)

Esses métodos só podem ser chamados em um bloco sincronizado ou método sincronizado. A razão é que se um método não precisa ser mutuamente exclusivo, não requer monitoramento ou colaboração entre threads e cada thread pode acessar livremente este método, não há necessidade de colaboração.

Finalmente

Os alunos que desejam aprender java podem responder às informações por mensagem privada para receber um resumo das perguntas da entrevista Java dos fabricantes de primeira linha + manual do Alibaba Taishan + guia de aprendizado e pensamento para cada ponto de conhecimento + um resumo dos pontos de conhecimento do núcleo Java em um documento pdf de 300 páginas!

O conteúdo desses materiais são todos os pontos de conhecimento que o entrevistador deve perguntar durante a entrevista. O capítulo inclui muitos pontos de conhecimento, incluindo conhecimento básico, coleções Java, JVM, simultaneidade multi-thread, princípios de primavera, microsserviços, Netty e RPC, Kafka , Diário, padrão de design, algoritmo Java, banco de dados, Zookeeper, cache distribuído, estrutura de dados, etc.

Arquivo

Acho que você gosta

Origin blog.csdn.net/weixin_46577306/article/details/108041674
Recomendado
Clasificación