Galeria de mapas mentais Simultaneidade Java
Este é um mapa mental sobre simultaneidade Java. O conteúdo principal inclui: bloqueios, pools de threads, contêineres simultâneos e conceitos básicos.
Editado em 2024-04-22 19:41:17이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
Simultaneidade Java
conceito básico
processo
amontoar
área de método
O heap e a área do método são recursos compartilhados por todos os threads. O heap é a maior parte da memória no processo e é usado principalmente para armazenar objetos recém-criados (quase todos os objetos alocam memória aqui). objetos. Informações de classe, constantes, variáveis estáticas, código compilado pelo compilador just-in-time e outros dados.
fio
contador de programa
Pilha de máquinas virtuais
pilha de métodos nativos
Pode haver vários threads em um processo, e vários threads compartilham os recursos de heap e área de método (metaespaço após JDK1.8), mas cada thread tem seu próprio contador de programa, pilha de máquina virtual e pilha de método local.
simultâneo
paralelo
Pode facilmente levar a vazamentos de memória, conflitos e insegurança de thread
Sincronizar
assíncrono
Segurança do fio
Criar tópico
Ciclo de vida e status do thread
NOVO
Pronto (Executável)
Correndo
Bloqueado
Bloqueio síncrono (bloqueado)
Aguardando bloqueio (ESPERANDO)
Bloqueio de espera por tempo limite (TMME-WAITING)
Morte (Morto/Terminado)
Troca de contexto de thread
impasse de thread
Quatro condições necessárias para impasse
Como evitar impasse
Como solucionar problemas
Gráfico: jconsole
jps -l descobre o número do processo do programa, número do processo jstack
JMM
definição
fundo
Coerência de CPU e cache
Otimização do processador
Reordenação paralela de instruções
Reorganização de otimização do compilador
Reorganização do sistema de memória
Teoria da simultaneidade
regras como se fosse serial
regra acontece antes
regras de sequência do programa
Monitore regras de bloqueio
Regras de variáveis voláteis
regra de transitividade
regra start()
regras de junção()
Três características principais
atomicidade
visibilidade
Ordem
Como resolver problemas de simultaneidade
Três palavras-chave principais
volátil
visibilidade
acontece antes do princípio
princípio
escrever semântica de memória
Leia a semântica da memória
Ordem
Implementação de semântica de memória
sincronizado
efeito
atomicidade
Ordem
visibilidade
escrever semântica de memória
Leia a semântica da memória
Uso
Decore métodos de instância
Modificar métodos estáticos
Decore blocos de código
princípio
bloco de código sincronizado
método de sincronização
modelo de objeto java
Cabeçalho do objeto
Marcar palavra
Ponto de Classe
Dados da instância
Alinhamento de bytes
atualização de bloqueio
não feche
Status de bloqueio
bloqueio de polarização
Status de bloqueio
Tempo de atualização
Operações específicas
beneficiar
O ID do thread tendencioso é inconsistente com o ID do thread atual.
Sucesso na competição
A competição falhou
Realização técnica
fechadura leve
Status de bloqueio
Tempo de atualização
efeito
Rodar
A diferença entre bloqueio de polarização e bloqueio de polarização
Bloqueio pesado
Status de bloqueio
Tempo de atualização
princípio
otimização jdk1.6
bloqueio de rotação
bloqueio de rotação adaptativo
eliminação de bloqueio
desbaste de bloqueio
bloqueio de polarização
fechadura leve
final
efeito
Reordenando regras
Escreva regras de reordenação para campos finais
Reordenando regras para leitura de campos finais
barreira de memória
contêiner simultâneo
Lista
CopyOnWriteArrayList
Vetor
Definir
CopyOnWriteArraySet
Mapa
ConcurrentHashMap
ConcurrentSkipListMap
Tabela Hash
fila
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
Fila Síncrona
Grupo de discussão
definição
Vantagem
Reduza o consumo de recursos
Melhore a velocidade de resposta
Melhore a capacidade de gerenciamento de threads
Como criar
Executores
FixoThreadPool
SingleThreadExecutor
Provavelmente é usado um LinkedBlockingQueue ilimitado. O comprimento máximo da fila de tarefas é Integer.MAX_VALUE. Um grande número de solicitações pode se acumular, resultando em OOM.
CachedThreadPool
A fila de sincronização SynchronousQueue é usada e o número de threads que podem ser criados é Integer.MAX_VALUE.
ScheduledThreadPool
A fila de bloqueio atrasado ilimitado DelayedWorkQueue é usada. O comprimento máximo da fila de tarefas é Integer.MAX_VALUE, que pode acumular um grande número de solicitações, resultando em OOM.
ThreadPoolExecutor
Parâmetros comuns
corePoolSize
máximoPoolSize
fila de trabalho
keepAliveTime
unidade
fábrica de threads
manipulador
Política de aborto
Política CallerRuns
Política de Descarte
DiscardOldestPolicy
Processo de tratamento de tarefas
Como definir o tamanho do pool de threads
Algoritmo teórico
método empírico
Tarefas intensivas de CPU (N 1)
Tarefas intensivas de E/S (2N)
Aula futura
Cancelar tarefa
Determinar se a tarefa foi cancelada
Determinar se a tarefa foi concluída
Obtenha resultados de execução de tarefas
deficiência
CompletávelFuturo
Resolva as deficiências do futuro
vantagem
Estágio de conclusão
Trancar
conceito básico
bloqueio pessimista
vantagem
O custo do bloqueio pessimista é fixo
deficiência
A competição feroz de bloqueios pode causar bloqueio de threads
Um grande número de threads bloqueados causará troca de contexto do sistema Aumente a sobrecarga de desempenho do sistema
O bloqueio pessimista também pode causar problemas de impasse
Cena aplicável
Escreva vários cenários e competição acirrada (para evitar falhas e novas tentativas frequentes que afetam o desempenho)
bloqueio otimista
vantagem
Não há competição de bloqueio causando bloqueio de thread
Não haverá problema de impasse
deficiência
Se os conflitos ocorrerem com frequência (ocorrem muitas gravações), haverá falhas e novas tentativas frequentes.
Cena aplicável
Vários cenários de leitura, menos competição (pode evitar bloqueios frequentes que afetam o desempenho)
Plano de implementação
Mecanismo de número de versão
Algoritmo CAS
Perguntas ABA
Longo tempo de ciclo e alta sobrecarga
Apenas operações atômicas em uma variável compartilhada são garantidas
ThreadLocal
efeito
princípio
Algoritmo hash
Conflito de hash
Problema de vazamento de memória
razão
solução
AQS
idéia principal
estado
Fila CLH
estrutura
princípio
vantagem
Excelente desempenho, baixo overhead para aquisição e liberação de bloqueios.
bloqueio justo
Simples de implementar e fácil de entender
Forte escalabilidade
deficiência
A operação de rotação causará grande sobrecarga da CPU quando o bloqueio for mantido por um longo período.
Função única e não pode suportar funções complexas
Variantes da coorte CLH
AQS altera a operação de spin para bloquear a operação de thread
Melhorias para bloquear estruturas de dados
Estenda o estado de cada nó
SINAL
PROPAGAR
DOENÇA
CANCELADO
Manter explicitamente nós predecessores e sucessores
Otimização do GC auxiliar, como definir explicitamente o nó de desenfileiramento como nulo
Diagrama esquemático
bloqueio compartilhado
bloqueio exclusivo
ReentranteLock
o que é
princípio
Processo de bloqueio injusto
Quando o thread um é bloqueado com sucesso
Dados internos do AQS
Falha no bloqueio do thread dois
Situação da fila CLH
Falha no bloqueio do thread três
Processo de bloqueio justo
Processo de desbloqueio
O processo de liberação do bloqueio
Aguardando dados da fila
dados finais da fila
Doença
Princípio de implementação
ReentranteReadWriteLock
Cena aplicável
Um thread que contém um bloqueio de leitura ainda pode adquirir um bloqueio de gravação?
O bloqueio de leitura não pode ser atualizado para bloqueio de gravação
Semáforo
Dois modos
modo justo
Modelo injusto
princípio
Trava de contagem regressiva
efeito
princípio
Descartável
Barreira Cíclica
Classe atômica
tipo básico
Número inteiro atômico
Atômico Longo
AtômicoBooleano
tipo de matriz
AtomicIntegerArray
AtômicoLongArray
Array de referência atômica
tipo de referência
Referência Atômica
Referência Atômica Estampada
Tipo de modificação de propriedade do objeto
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater