Bons rapazes! Este artigo irá explicar a você a análise do código-fonte JDK do princípio da implementação de simultaneidade Java (documento PDF)

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Prefácio

Existem opções de multiprocesso, multiencadeamento e multi-corrotina para programação simultânea. Para Java, não é como C ++, que chama APIs do sistema Linux para "bifurcar" vários processos durante a operação, nem fornece nativamente várias corrotinas no nível de linguagem como Go. Em Java, a simultaneidade é um modelo multithread.

Para a cognição do cérebro humano, o "código linha por linha" é certamente o mais fácil de entender. No entanto, no multithreading, o código de vários threads é cruzado e colocado em paralelo, e é necessário acessar recursos mutuamente exclusivos e comunicar-se entre si. Como desenvolvedor, você precisa projetar cuidadosamente a exclusão mútua e a sincronização entre os threads.Se você não for cuidadoso, você escreverá um código que não é seguro para threads. Por esse motivo, a programação multithread sempre foi um campo amplamente e profundamente discutido.

Antes do lançamento do JDK 1.5, o Java fornecia apenas alguns mecanismos simples de exclusão mútua de thread e sincronização no nível da linguagem, ou seja, a palavra-chave synchronized, wait and notifique. Se você encontrar cenários complexos de programação multithread, os desenvolvedores precisam resolver problemas complexos de sincronização de thread com base nesses mecanismos simples. Desde o JDK 1.5, o mestre de programação simultânea Doug Lea oferece uma estrutura de programação simultânea sistemática e abrangente - o pacote JDK Concurrent, que contém várias operações atômicas, containers thread-safe, thread pools e programação assíncrona.

Com base no JDK 7 e no JDK 8, este artigo conduz uma análise abrangente do código-fonte de todo o pacote Simultâneo. A implementação da maioria das funções de simultaneidade no JDK 8 é a mesma do JDK 7, mas alguns recursos adicionais foram adicionados. Por exemplo, CompletableFuture, nova implementação de ConcurrentHashMap, StampedLock, LongAdder, etc.

A análise do código-fonte de todo o pacote Simultâneo tem as seguintes finalidades:

  • (1) Ajude os usuários a escolher soluções de maneira razoável. O pacote Simultâneo é enorme, com vários mecanismos de exclusão e sincronização de thread. Entenda o princípio de implementação, os usuários podem escolher a solução mais adequada de acordo com seus próprios cenários de negócios. Evite recriar as rodas e evite cair no "poço" devido ao uso impróprio.
  • (2) A análise do código-fonte permitirá que os usuários compreendam os princípios básicos das barreiras de memória, operações atômicas CAS, bloqueios e desbloqueio, e não mais permanecerão em um estágio "paradoxal", mas compreenderão profundamente sua essência.
  • (3) Absorva o pensamento dos mestres. No pacote Simultâneo, você pode ver várias estratégias inteligentes de processamento simultâneo. Olhando para o pacote Simultâneo, você descobrirá que no multithreading, não existem apenas bloqueios mutex simples, mecanismos de notificação e pools de threads.

Este artigo começará com os fundamentos de multi-threading e, gradualmente, mergulhará em todo o pacote Simultâneo. Depois de ler este livro, você terá uma compreensão abrangente e profunda dos princípios de multithreading e vários princípios de design simultâneo.

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 1 Noções básicas de multithreading

  • 1.1 Desligamento normal de threads
  • 1.2 Função InterruptedException () e função interrupt ()
  • 1.3 palavra-chave sincronizada
  • 1,4 esperar () 与 notificar ()
  • 1,5 palavra-chave volátil
  • 1.6 JMM 与 acontecer antes
  • 1.7 barreira de memória
  • 1.8 palavra-chave final
  • 1.9 Aplicação abrangente: programação sem bloqueio

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 2 Classe Atômica

A partir deste capítulo, analisaremos a hierarquia de todo o pacote Simultâneo passo a passo, do simples ao complexo, de baixo para cima, conforme mostrado na figura:

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

  • 2.1 AtomicInteger 和 AtomicLong
  • 2.2 AtomicBoolean 和 AtomicReference
  • 2.3 AtomicStampedReference 和 AtomicMarkableReference
  • 2.4 AtomicIntegerFieldUpdater 、 AtomicLongFieldUpdater 和 AtomicReferenceFieldUpdater
  • 2.5 AtomicIntegerArray 、 AtomicLongArray 和 Atomic-ReferenceArray
  • 2.6 Striped64 e LongAdder

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 3 Bloqueio e condição

  • 3.1 Mutex
  • 3.2 Bloqueio de leitura e gravação
  • 3.3 Condição
  • 3.4 StampedLock

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 4 Ferramentas de sincronização

Além de bloqueios e condições, o pacote Simultâneo também fornece uma série de ferramentas de sincronização. Alguns dos princípios dessas ferramentas de sincronização são baseados em AQS e alguns requerem mecanismos de implementação especiais.Este capítulo analisará os princípios de implementação de todas as ferramentas de sincronização.

  • 4.1 Semáforo
  • 4.2 CountDownLatch
  • 4.3 CyclicBarrier
  • 4.4 Trocador
  • 4.5 Phaser

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 5 Recipientes simultâneos

Na implementação do Lock e do Phaser, uma fila sem bloqueio e uma pilha sem bloqueio baseada em CAS foram introduzidas. Este capítulo irá apresentar de forma abrangente os vários contêineres simultâneos fornecidos pelo pacote Simultâneo.

  • 5.1 BlockingQueue
  • 5.2 BlockingDeque
  • 5.3 CopyOnWrite
  • 5.4 ConcurrentLinkedQueue/Deque
  • 5.5 ConcurrentHashMap
  • 5.6 ConcurrentSkipListMap / Set

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 6 Grupo de Threads e Futuro

  • 6.1 O princípio de realização do pool de threads
  • 6.2 Sistema de herança de classe do pool de threads
  • 6.3 ThreadPoolExector
  • 6.4 Callable 与 Future
  • 6.5 ScheduledThreadPoolExecutor
  • 6.6 Ferramentas de executores

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 7 ForkJoinPool

  • 7.1 Uso da ForkJoinPool
  • 7.2 Estrutura de dados principais
  • 7.3 Fila de roubo de trabalho
  • 7.4 Controle de status ForkJoinPool
  • 7.5 Bloqueio do mecanismo de ativação do thread de trabalho
  • 7.6 Análise do processo de envio de tarefas
  • 7.7 Algoritmo de roubo de trabalho: análise do processo de execução da tarefa
  • 7.8 ForkJoinTask 的 fork / join
  • 7.9 Fechamento elegante de ForkJoinPool

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Capítulo 8 CompletableFuture

A partir do JDK 8, CompletableFuture, uma poderosa ferramenta de programação assíncrona, é fornecida no pacote Simultâneo. Antes do JDK8, a programação assíncrona pode ser alcançada por meio do pool de threads e do Future, mas a função não é poderosa o suficiente. O surgimento de CompletableFuture levou os recursos de programação assíncrona do Java um grande passo à frente. Antes de discutir o princípio de CompletableFuture, vamos dar uma olhada detalhada no uso de CompletableFuture. A partir desses usos, podemos ver quais recursos foram aprimorados em comparação com o Future anterior.

  • 8.1 Uso CompletableFuture
  • 8.2 Quatro protótipos de missão
  • 8.3 Interface CompletionStage
  • 8.4 Princípio Interno do Futuro Completável
  • 8.5 Execução de tarefas em malha: gráfico acíclico direcionado
  • 8.6 Análise do gráfico de cálculo dentro de allOf

 

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

Devido ao tamanho do artigo, o documento completo não pode ser carregado, apenas parte dele pode ser carregado aqui. Amigos em necessidade podem me adicionar: "VX Assistant" para obtê-lo gratuitamente.

Para não perder depois de aprender!  Análise do código-fonte JDK do princípio de implementação simultânea Java

 

 

Acho que você gosta

Origin blog.csdn.net/a159357445566/article/details/109096838
Recomendado
Clasificación