¡Chicos buenos! Este artículo le explicará el análisis del código fuente JDK del principio de implementación concurrente de Java (documento PDF)

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Prefacio

Existen opciones multiproceso, multiproceso y multiproceso para programación concurrente. Para Java, no es como C ++, que llama a las API del sistema Linux para "bifurcar" múltiples procesos durante la operación, ni proporciona de forma nativa múltiples corrutinas a nivel de lenguaje como Go. En Java, la concurrencia es un modelo de subprocesos múltiples.

Para la cognición del cerebro humano, "código línea por línea" es, por supuesto, el más fácil de entender. Sin embargo, en el subproceso múltiple, el código de varios subprocesos se cruza y se conecta en paralelo, y es necesario acceder a recursos mutuamente excluyentes y comunicarse entre sí. Como desarrollador, debe diseñar cuidadosamente la exclusión mutua y la sincronización entre subprocesos. Si no tiene cuidado, escribirá código que no sea seguro para subprocesos. Por esta razón, la programación multiproceso siempre ha sido un campo que se ha debatido amplia y profundamente.

Antes del lanzamiento de JDK 1.5, Java solo proporcionaba algunos mecanismos simples de sincronización y exclusión mutua de subprocesos a nivel de lenguaje, a saber, la palabra clave sincronizada, esperar y notificar. Si se encuentra con escenarios complejos de programación de subprocesos múltiples, los desarrolladores deben resolver problemas complejos de sincronización de subprocesos basados ​​en estos simples mecanismos. Desde JDK 1.5, el maestro de programación concurrente Doug Lea ha ofrecido un marco de programación concurrente sistemático y completo: el paquete JDK Concurrent, que contiene varias operaciones atómicas, contenedores seguros para subprocesos, grupos de subprocesos y programación asincrónica.

Basado en JDK 7 y JDK 8, este artículo realiza un análisis completo del código fuente de todo el paquete Concurrent. La implementación de la mayoría de las funciones de concurrencia en JDK 8 es la misma que la de JDK 7, pero se han agregado algunas características adicionales. Por ejemplo, CompletableFuture, nueva implementación de ConcurrentHashMap, StampedLock, LongAdder, etc.

El análisis del código fuente de todo el paquete Concurrent tiene los siguientes propósitos:

  • (1) Ayude a los usuarios a elegir soluciones de manera razonable. El paquete Concurrent es enorme, con varios mecanismos de sincronización y exclusión de subprocesos. Comprender el principio de implementación, los usuarios pueden elegir la solución más adecuada de acuerdo con sus propios escenarios comerciales. Evite recrear ruedas, y evite caer en el "pozo" por uso inadecuado.
  • (2) El análisis del código fuente permitirá a los usuarios comprender los principios subyacentes de las barreras de memoria, las operaciones atómicas CAS, los bloqueos y el bloqueo libre, y ya no permanecerán en una etapa "paradójica", sino que comprenderán profundamente su esencia.
  • (3) Absorber el pensamiento de los maestros. En el paquete Concurrent, puede ver varias estrategias inteligentes de procesamiento concurrente. Si observa el paquete Concurrent, encontrará que en el subproceso múltiple, no solo hay bloqueos de exclusión mutua simples, mecanismos de notificación y grupos de subprocesos.

Este artículo comenzará con los conceptos básicos de subprocesos múltiples y gradualmente profundizará en todo el paquete Concurrent. Después de leer este libro, tendrá una comprensión completa y profunda de los principios de multiproceso y varios principios de diseño concurrente.

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 1 Conceptos básicos de subprocesos múltiples

  • 1.1 Cierre elegante de hilos
  • 1.2 Función InterruptedException () y función interrupt ()
  • 1.3 palabra clave sincronizada
  • 1.4 esperar () 与 notificar ()
  • 1.5 palabra clave volátil
  • 1.6 JMM 与 suceder antes
  • 1.7 Barrera de memoria
  • 1.8 palabra clave final
  • 1.9 Aplicación completa: programación sin bloqueo

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 2 Clase atómica

Desde el comienzo de este capítulo, analizaremos la jerarquía de todo el paquete Concurrent paso a paso, de simple a complejo, de abajo hacia arriba, como se muestra en la figura:

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de 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 y LongAdder

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 3 Bloqueo y condición

  • 3.1 Mutex
  • 3.2 Bloqueo de lectura y escritura
  • 3.3 Condición
  • 3.4 Bloqueo sellado

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 4 Herramientas de sincronización

Además de bloqueos y condiciones, el paquete Concurrent también proporciona una serie de herramientas de sincronización. Algunos de los principios de estas herramientas de sincronización se basan en AQS y algunos requieren mecanismos de implementación especiales Este capítulo analizará los principios de implementación de todas las herramientas de sincronización.

  • 4.1 Semáforo
  • 4.2 CountdownLatch
  • 4.3 Barrera cíclica
  • 4.4 Intercambiador
  • 4.5 Phaser

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 5 Contenedores concurrentes

En la implementación de Lock y Phaser, se introdujeron una cola sin bloqueo y una pila sin bloqueo basada en CAS. Este capítulo presentará de forma exhaustiva los diversos contenedores simultáneos proporcionados por el paquete Concurrent.

  • 5.1 BlockingQueue
  • 5.2 Placa de bloqueo
  • 5.3 CopyOnWrite
  • 5.4 ConcurrentLinkedQueue / Deck
  • 5.5 ConcurrentHashMap
  • 5.6 ConcurrentSkipListMap / Set

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 6 Grupo de hilos y futuro

  • 6.1 El principio de realización del grupo de subprocesos
  • 6.2 Sistema de herencia de clases del grupo de subprocesos
  • 6.3 ThreadPoolExector
  • 6.4 Invocable 与 Futuro
  • 6.5 ScheduledThreadPoolExecutor
  • 6.6 Herramientas de ejecutores

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 7 ForkJoinPool

  • 7.1 Uso de ForkJoinPool
  • 7.2 Estructura de datos básicos
  • 7.3 Cola de robo de trabajo
  • 7.4 Control de estado de ForkJoinPool
  • 7.5 Bloqueo del mecanismo de activación del hilo de trabajo
  • 7.6 Análisis del proceso de envío de tareas
  • 7.7 Algoritmo de robo de trabajo: análisis del proceso de ejecución de tareas
  • 7.8 ForkJoinTask 的 fork / join
  • 7.9 Cierre elegante de ForkJoinPool

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Capítulo 8 CompletableFuture

A partir de JDK 8, CompletableFuture, una poderosa herramienta de programación asíncrona, se proporciona en el paquete Concurrent. Antes de JDK8, la programación asincrónica se puede lograr a través del grupo de subprocesos y Future, pero la función no es lo suficientemente potente. La aparición de CompletableFuture ha llevado las capacidades de programación asincrónica de Java un gran paso adelante. Antes de discutir el principio de CompletableFuture, echemos un vistazo detallado al uso de CompletableFuture. A partir de estos usos, podemos ver qué capacidades se han mejorado en comparación con el Future anterior.

  • 8.1 CompletableFuture uso
  • 8.2 Cuatro prototipos de misiones
  • 8.3 Interfaz CompletionStage
  • 8.4 Principio interno de un futuro completo
  • 8.5 Ejecución de tareas en malla: gráfico acíclico dirigido
  • 8.6 Análisis del gráfico de cálculo dentro de allOf

 

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

Debido a la extensión del artículo, el documento completo no se puede cargar, solo una parte se puede cargar aquí. Los amigos que lo necesiten pueden agregarme: "VX Assistant" para obtenerlo gratis.

¡No perder después de aprender!  Análisis del código fuente JDK del principio de implementación concurrente de Java

 

 

Supongo que te gusta

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