O significado do trabalho duro é que nos próximos dias você verá apenas pessoas e coisas que você gosta!
Problemas e solicitações pull são bem-vindos. Todos os documentos são codificados por mim. Se você os acha bons, fique à vontade para marcá-los para incentivo e apoio :)
Toda a série de artigos é sobre simultaneidade Java . Em primeiro lugar, é do meu interesse. Em segundo lugar, esta parte é muito difícil de entender na prática. Portanto, durante o processo de aprendizagem, registrei o conhecimento básico relacionado à simultaneidade Java. Primeiro, posso estabelecer um sistema para o meu conhecimento e também espero que seja útil para outras pessoas.
Sobre tópicos de simultaneidade Java:
(1) Contém o conhecimento básico de simultaneidade, e cada título está vinculado a um artigo específico;
(2) Contém perguntas de entrevista para recrutamento de outono. Compreendê-las ajudará você a ganhar algo (e espero que todos possam encontrar seu emprego favorito :))
(3) Durante o processo de leitura, se for útil, por favor, dê um sinal de positivo, o que é um incentivo para minha persistência na codificação.
Nota: Indique a fonte original ao reimprimir, obrigado!
conhecimento básico
1.1 Vantagens e desvantagens da programação simultânea
Pontos de conhecimento: (1) Por que usar simultaneidade? (Vantagens); (2) Desvantagens da programação simultânea; (3) Conceitos confusos;
1.2 Status do thread e operações básicas
Pontos de conhecimento: (1) Como criar um novo thread; (2) Conversão de estado de thread; (3) Operações básicas de threads;
Teoria da Simultaneidade (JMM)
Modelo de memória Java e regras do que acontece antes
Pontos de conhecimento: (1) Estrutura de memória JMM; (2) Reordenação;
Palavra-chave de simultaneidade
3.1 Permite que você entenda totalmente o Sincronizado
Pontos de conhecimento: (1) Como usar sincronizado (2) mecanismo de monitoramento (3) relacionamento sincronizado acontece antes;
3.2 Permite que você entenda totalmente o volátil
Pontos de conhecimento: (1) Princípio de implementação; (2) Derivação da relação acontece-antes; (3) Semântica de memória;
3.3 Você acha que realmente entendeu o final?
Pontos de conhecimento: (1) Como usar; (2) regras de reordenação final; (3) princípio de implementação final; (4) as referências finais não podem "transbordar" do construtor (este escape);
3.4 Resumo das três propriedades principais: atomicidade, ordem e visibilidade
Pontos de conhecimento: (1) Atomicidade: sincronizado; (2) Visibilidade: sincronizado, volátil; (3) Ordem: sincronizado, volátil;
Sistema de bloqueio
4.1 Primeira introdução ao Lock e AbstractQueuedSynchronizer (AQS)
Pontos de conhecimento: (1) Comparação entre Lock e sincronizado; (2) Intenção de design do AQS; (3) Como usar o AQS para implementar componentes de sincronização personalizados;
4.2 Compreensão aprofundada do AbstractQueuedSynchronizer (AQS)
Pontos de conhecimento: (1) Estrutura de dados da fila de sincronização AQS; (2) Bloqueio exclusivo;
4.3 Entenda o ReentrantLock novamente
Pontos de conhecimento: (1) O princípio de implementação do bloqueio reentrante; (2) O princípio de implementação do bloqueio justo; (3) O princípio de implementação do bloqueio injusto;
4.4 Compreensão aprofundada do bloqueio de leitura e gravação ReentrantReadWriteLock
Pontos de conhecimento: (1) Como representar o status de leitura e gravação; (2) Aquisição e liberação de WriteLock; (3) Aquisição e liberação de ReadLock; Cenários de aplicação
4.5 Explicação detalhada dos mecanismos de espera/notificação de sinal e espera de condição
Pontos de conhecimento: (1) Características comparadas com o mecanismo de espera/notificação do objeto (2) Métodos correspondentes à espera/notificação do objeto; 6) Combinação de espera e sinal/sinalAll;
4.6 Ferramenta LockSupport
Pontos de conhecimento: (1) Funções principais (2) Características comparadas com o despertar de bloqueio sincronizado;
contêiner simultâneo
5.1 Contêiner simultâneo ConcurrentHashMap (JDK versão 1.8)
Pontos de conhecimento: (1) atributos principais; (2) classes internas importantes; (7) métodos de construção; 8) Processo de execução do método de contagem de tamanho; (9) Comparação entre a versão 1.8 ConcurrentHashMap e versões anteriores;
5.2 CopyOnWriteArrayList do contêiner simultâneo
Pontos de conhecimento: (1) Princípio de implementação; (2) A diferença entre COW e ReentrantReadWriteLock; (3) Cenários de aplicação;
5.3 ConcurrentLinkedQueue de contêiner simultâneo
Pontos de conhecimento: (1) Princípio de implementação (2) Estrutura de dados; (3) Método central;
5.4 ThreadLocal de contêiner simultâneo
Pontos de conhecimento: (1) Princípio de implementação (2) Princípio do método Set (3) Princípio do método Get;
Um artigo que explica detalhadamente o problema de vazamento de memória ThreadLocal a partir do código-fonte.
Pontos de conhecimento: (1) Princípio de vazamento de memória ThreadLocal; (2) Melhores práticas do ThreadLocal;
5.5 BlockingQueue de contêiner simultâneo
Pontos de conhecimento: (1) Operações básicas de BlockingQueue (2) BlockingQueue comumente usado;
Explicação detalhada dos princípios de implementação de ArrayBlockingQueue e LinkedBlockingQueue em contêineres simultâneos
Pool de threads (sistema executor)
6.1 Princípio de implementação do pool de threads
Pontos de conhecimento: (1) Por que usar o pool de threads? (2) Processo de execução; (3) O significado de cada parâmetro do construtor; (4) Como fechar o pool de threads;
6.2 ScheduledThreadPoolExecutor do pool de threads
Pontos de conhecimento: (1) Estrutura de classe; (2) Métodos comuns; (3) ScheduledFutureTask;
6.3 Resumo das operações básicas do FutureTask
Pontos de conhecimento: (1) Vários estados do FutureTask; (2) método get (3) método cancel (4) cenários de aplicação;
Classe de operação atômica
7.1 Resumo das classes de operação atômica no pacote atômico em Java
Pontos de conhecimento: (1) Princípio de implementação; (2) Tipo básico de atualização atômica; (3) Tipo de matriz de atualização atômica;
Ferramentas de simultaneidade
8.1 Em inglês simples, classes da ferramenta de simultaneidade Java-CountDownLatch, CyclicBarrier
Pontos de conhecimento: (1) CountDownLatch (2) CyclicBarrier; (3) Comparação entre CountDownLatch e CyclicBarrier;
8.2 Classes de ferramentas de simultaneidade Java em vernáculo - Semaphore, Exchanger
Pontos de conhecimento: (1) Semáforo de controle de acesso a recursos (2) Trocador de dados;
Prática de simultaneidade
9.1 Um artigo que permite entender a fundo a questão produtor-consumidor
Gráfico de conhecimento de simultaneidade JAVA
Você pode ir para uma nova janela para ampliar para melhor visualização ou visualizar a imagem original.
Link para a imagem original do gráfico de conhecimento. Se for útil, você pode cloná-lo para seu próprio uso.