Programación simultánea Java combate parte dos registro de aprendizaje

Inserte la descripción de la imagen aquí

14 | Bloqueo y condición (Parte 1): Oculto oculto en paquetes concurrentes

En el campo de la programación concurrente, hay dos problemas centrales: uno es la exclusión mutua , es decir , solo un hilo puede acceder a los recursos compartidos al mismo tiempo; el otro es la sincronización , es decir, cómo los hilos se comunican y cooperan entre los hilos. Estos dos problemas principales pueden resolverse mediante el proceso de gestión. El paquete concurrente de Java SDK implementa el proceso de administración a través de dos interfaces, Lock y Condition, donde Lock se usa para resolver el problema de exclusión mutua y la condición se usa para resolver el problema de sincronización.

Razones para la reingeniería

Inserte la descripción de la imagen aquí
Estos tres programas pueden compensar el problema de la sincronización. Creo que debería ser capaz de entender aquí. Estas tres soluciones son la razón principal para "recrear las ruedas", que se reflejan en la API, que son los tres métodos de la interfaz de bloqueo. Los detalles son los siguientes:

// 支持中断的API
void lockInterruptibly() throws InterruptedException;
// 支持超时的API
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
// 支持非阻塞获取锁的API
boolean tryLock();

Cómo garantizar la visibilidad

Utiliza la regla Sucede antes relacionada con volátil

¿Qué es una cerradura reentrante?

Bloqueo justo y bloqueo injusto

Mejores prácticas para usar cerraduras

Siempre se bloquea solo cuando se actualizan las variables miembro de un objeto.
Siempre se bloquea solo cuando se accede a las variables miembro variables.
Nunca se bloquea al llamar a métodos de otros objetos

15 | Bloqueo y condición (Parte 2): ¿Cómo utiliza Dubbo el proceso de tubería para lograr la sincronización de transferencia asincrónica?

Entonces, ¿cómo usar dos variables de condición para implementar rápidamente una cola de bloqueo?

Síncrono y asíncrono

Análisis del código fuente de Dubbo

16 | Semáforo: ¿Cómo implementar rápidamente un limitador de corriente?

Modelo de semáforo

Cómo usar semáforos

Implemente rápidamente un limitador de corriente

Semaphore puede permitir que múltiples hilos accedan a una sección crítica.

¿Existe tal demanda en la realidad? Si Los requisitos más comunes son los diversos recursos agrupados que encontramos en nuestro trabajo , como los grupos de conexiones, los grupos de objetos, los grupos de subprocesos, etc. Entre ellos, es posible que esté más familiarizado con el grupo de conexiones de la base de datos. Al mismo tiempo, debe permitir que varios subprocesos usen el grupo de conexiones al mismo tiempo. Por supuesto, no se permite que cada conexión use otros subprocesos antes de que se libere.

17 | ReadWriteLock: ¿Cómo implementar rápidamente un caché completo?

¿Qué es un bloqueo de lectura-escritura?

Implemente rápidamente un caché

Implemente la carga de caché bajo demanda

Actualización y degradación del bloqueo de lectura-escritura

18 | StampedLock: ¿Hay un bloqueo más rápido que un bloqueo de lectura-escritura?

Tres modos de bloqueo compatibles con StampedLock

ReadWriteLock admite dos modos: uno es bloqueo de lectura y el otro es bloqueo de escritura. StampedLock admite tres modos, a saber: bloqueo de escritura, bloqueo de lectura pesimista y lectura optimista.

Mayor comprensión de la lectura optimista.

Notas sobre el uso de StampedLock

19 | CountDownLatch y CyclicBarrier: ¿Cómo hacer que el ritmo multihilo sea consistente?

Utilice el sistema de reconciliación de optimización paralela

Usando CountDownLatch para lograr el hilo de espera

Optimizar aún más el rendimiento

Usando CyclicBarrier para realizar la sincronización de hilos

20 | Contenedores concurrentes: ¿Qué "pozos" necesitamos llenar?

Contenedor de sincronización y sus consideraciones

Lista 、 Mapa 、 Establecer 和 Cola

Contenedores concurrentes y sus consideraciones

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
(1) Lista
(2) Mapa
(3) Conjunto
(4) Cola

  1.单端阻塞队列 2.双端阻塞队列 3.单端非阻塞队列 4.双端非阻塞队列

21 | Atomic: un modelo de herramientas sin bloqueo

Principio de implementación del esquema sin bloqueo

Resumen atómico

Inserte la descripción de la imagen aquí

  1. Tipos de datos atómicos
  2. Tipo de referencia de objeto atómico
  3. Matriz atómica
  4. Actualizador de atributos de objetos atómicos
  5. Acumulador atomizado

22 | Ejecutor y grupo de hilos: ¿cómo crear el grupo de hilos correcto?

El grupo de subprocesos es un modelo productor-consumidor

Cómo usar el grupo de subprocesos en Java

A qué prestar atención cuando se usa el grupo de subprocesos

23 | Futuro: ¿Cómo usar multihilo para lograr el mejor programa de "hervir té"?

Cómo obtener el resultado de la ejecución de la tarea

Realice el programa óptimo de "quemar agua y hacer té"

24 | CompletableFuture: la programación asincrónica no es tan difícil

Ventajas principales de CompletableFuture

Crear objeto CompletableFuture

Cómo entender la interfaz de CompletionStage

Cómo la interfaz de CompletionStage describe las relaciones en serie, Y las relaciones de agregación, O las relaciones de agregación y el manejo de excepciones.

  1. Describir las relaciones seriales.
  2. Describa y convergencia
  3. Describa o convergencia
  4. Manejo de excepciones

25 | CompletionService: ¿Cómo realizar tareas asincrónicas en lotes?

Uso de CompletionService para realizar el sistema de consulta

Entonces, ¿cómo se crea un CompletionService?

Descripción de la interfaz de CompletionService

Usando CompletionService para realizar Forking Cluster en Dubbo

26 | Fork / Join: versión independiente de MapReduce

Para tareas paralelas simples, puede usar la solución "grupo de subprocesos + Futuro"; si hay una relación de agregación entre las tareas, ya sea una agregación AND u OR, pueden ser resueltas por CompletableFuture; mientras que las tareas paralelas por lotes, entonces Se puede resolver con CompletionService.

Divide y conquista el modelo de tarea

Uso de Fork / Join

Cómo funciona ForkJoinPool

Simule MapReduce para contar la cantidad de palabras

27 | Respuestas a temas candentes de módulos de herramientas concurrentes

Los pensamientos se dejan al final de cada artículo.

1. mientras (verdadero) no es preocupante

2. signalAll () siempre hace que la gente se preocupe

3. El semáforo requiere bloqueo a bloqueo

4. La aplicación y liberación de la cerradura debe aparecer en pares.

5. La devolución de llamada siempre se preocupa por quién es el hilo de ejecución

6. Grupo de subprocesos compartido: las bendiciones y los compartimientos deben tener dificultades

7. Una herramienta para la ubicación del problema en línea: volcado de la pila de subprocesos

138 artículos originales publicados · elogiados 3 · visitas 7211

Supongo que te gusta

Origin blog.csdn.net/weixin_43719015/article/details/105668197
Recomendado
Clasificación