Quando falamos sobre thread safety, escolheremos o método de bloqueio para resolvê-lo. Os tipos de bloqueio em Java são divididos em seis tipos. Os dois métodos de bloqueio mais comuns que encontramos são bloqueio e sincronização. Este também é o princípio e a pergunta mais frequente sobre o mecanismo nas entrevistas. Abaixo, mostraremos as perguntas comuns das entrevistas em Java. Vamos ver se você consegue responder a todas elas.
1.A diferença entre efeitos sincronizados em métodos estáticos e métodos não estáticos
Métodos não estáticos:
Bloquear o objeto (pode ser entendido como bloquear a memória deste objeto. Observe que é apenas esta memória, outros objetos semelhantes terão seus próprios bloqueios de memória. Neste momento, o método de sincronização do objeto é executado em mais de um). outro thread (nota: é o objeto) irá gerar exclusão mútua
Método estático : equivalente ao bloqueio da classe (*.class está localizado na área de código, e o método estático está localizado na área estática. Os objetos gerados por esta classe compartilham este método estático, então N objetos competem por esta memória),
Neste momento , enquanto o objeto gerado por esta classe for chamado, ocorrerá exclusão mútua quando este método estático for chamado. Ou seja, todos os objetos desta classe compartilham um bloqueio.
2.Quais são os tipos de bloqueio?
(1) Bloqueio otimista e bloqueio pessimista
(2) Bloqueio de rotação e bloqueio sem rotação
(3) Bloqueio reentrante e bloqueio não reentrante
(4) Trava leve e sem trava e trava tendenciosa e trava pesada
(5) Bloqueio mutex e bloqueio compartilhado
(6) Bloqueio justo e bloqueio injusto
3. Vários métodos de sincronização de threads
modificação sincronizada
volátil implementa sincronização (somente a visibilidade é garantida, não a atomicidade)
Use a variável local ThreadLocal
Use classes atômicas ( AtomicInteger, AtomicBoolean...)
Usar bloqueio
Use a classe contêiner ( BlockingQueue, ConcurrentHashMap)
4. A diferença entre mecanismos sincronizados e de bloqueio
sincronizado originalmente usava o mecanismo de bloqueio pessimista da CPU, ou seja, o thread obteve um bloqueio exclusivo. Um bloqueio exclusivo significa que outros threads só podem contar com o bloqueio para aguardar que o thread libere o bloqueio.
Lock usa bloqueio otimista. O chamado bloqueio otimista consiste em concluir uma operação sem bloquear todas as vezes, mas assumindo que não há conflito. Se falhar devido a um conflito, será tentada novamente até ser bem-sucedida. O mecanismo para implementar o bloqueio otimista é a operação CAS (Compare and Swap).
5. Fale sobre questões de segurança de thread
A segurança de thread é um problema no campo de multithreading. A segurança de thread pode ser simplesmente entendida como um método ou instância que pode ser usada em um ambiente multithread sem problemas.
Na programação Java multithread, são fornecidas várias maneiras de obter segurança de thread Java:
A maneira mais simples, use a palavra-chave Synchronization
Use classes atômicas do pacote java.util.concurrent.atomic, como AtomicInteger
Usando bloqueios do pacote java.util.concurrent.locks
Use a coleção ConcurrentHashMap segura para threads
Use a palavra-chave volátil para garantir visibilidade variável
O texto acima é uma introdução às perguntas da entrevista sobre bloqueios em Java. Para pontos de conhecimento sobre os quais você não tem clareza, você deve encontrar informações a tempo de resolvê-los e fortalecer sua memória sobre o conteúdo do bloqueio.