El significado del trabajo duro es que en los días venideros, ¡solo verás personas y cosas que te gustan!
Los problemas y las solicitudes de extracción son bienvenidos. Todos los documentos están codificados por mí mismo. Si crees que son buenos, puedes destacarlos para recibir aliento y apoyo :)
Toda la serie de artículos trata sobre la concurrencia de Java . En primer lugar, es de mi propio interés. En segundo lugar, esta parte es muy difícil de entender en la práctica y a menudo se pregunta durante el proceso de entrevista. Por lo tanto, durante el proceso de aprendizaje, registré los conocimientos básicos relacionados con la concurrencia de Java. Primero, puedo establecer un sistema para mi conocimiento y también espero que sea útil para otros.
Acerca de los temas de concurrencia de Java:
(1) Contiene conocimientos básicos de concurrencia y cada título enlaza con un artículo específico;
(2) Contiene preguntas de la entrevista para la contratación de otoño. Comprenderlas le ayudará a obtener algo (y espero que todos puedan encontrar su trabajo favorito :)).
(3) Durante el proceso de lectura, si es útil, dale el visto bueno, lo cual es un estímulo para mi perseverancia en la codificación.
Nota: Indique la fuente original al reimprimir, ¡gracias!
conocimientos basicos
1.1 Ventajas y desventajas de la programación concurrente
Puntos de conocimiento: (1) ¿Por qué utilizar la concurrencia? (Ventajas); (2) Desventajas de la programación concurrente; (3) Conceptos confusos;
1.2 Estado del hilo y operaciones básicas.
Puntos de conocimiento: (1) Cómo crear un nuevo hilo; (2) Conversión de estado de hilo (3) Operaciones básicas de hilo (4) Hilo de demonio;
Teoría de la concurrencia (JMM)
Modelo de memoria Java y reglas de sucede antes
Puntos de conocimiento: (1) estructura de memoria JMM; (2) reordenamiento (3) reglas de ocurre antes;
Palabra clave de simultaneidad
3.1 Permitirle comprender completamente Sincronizado
Puntos de conocimiento: (1) Cómo utilizar sincronizado; (2) mecanismo de monitoreo; (3) relación de sincronización anterior; (4) semántica de memoria sincronizada (5) optimización de bloqueo;
3.2 Permitirle comprender completamente la volatilidad
Puntos de conocimiento: (1) Principio de implementación; (2) Derivación de la relación sucede antes (3) Semántica de la memoria (4) Implementación de la semántica de la memoria;
3.3 ¿Crees que realmente entiendes el final?
Puntos de conocimiento: (1) Cómo utilizar; (2) reglas de reordenamiento final; (3) principio de implementación final (4) las referencias finales no pueden "desbordarse" del constructor (este escape)
3.4 Resumen de tres propiedades principales: atomicidad, orden y visibilidad
Puntos de conocimiento: (1) Atomicidad: sincronizada; (2) Visibilidad: sincronizada, volátil (3) Orden: sincronizada, volátil;
Sistema de bloqueo
4.1 Primera introducción a Lock y AbstractQueuedSynchronizer (AQS)
Puntos de conocimiento: (1) Comparación entre Lock y sincronizado; (2) Intención de diseño de AQS (3) Cómo utilizar AQS para implementar componentes de sincronización personalizados (4) Métodos anulables (5) Métodos de plantilla proporcionados por AQS;
4.2 Comprensión profunda de AbstractQueuedSynchronizer (AQS)
Puntos de conocimiento: (1) Estructura de datos de la cola de sincronización AQS (2) Bloqueo exclusivo (3) Bloqueo compartido;
4.3 Comprender ReentrantLock nuevamente
Puntos de conocimiento: (1) El principio de implementación del bloqueo reentrante; (2) El principio de implementación del bloqueo justo (3) El principio de implementación del bloqueo injusto (4) Comparación entre el bloqueo justo y el bloqueo injusto;
4.4 Comprensión profunda del bloqueo de lectura y escritura ReentrantReadWriteLock
Puntos de conocimiento: (1) Cómo representar el estado de lectura y escritura; (2) Adquisición y liberación de WriteLock; (3) Adquisición y liberación de ReadLock; (4) Estrategia de degradación de bloqueo (5) Generación de cola de espera; Escenarios de aplicación
4.5 Explicación detallada de los mecanismos de espera/notificación de señal y espera de condición
Puntos de conocimiento: (1) Características en comparación con el mecanismo de espera/notificación del Objeto; (2) Métodos correspondientes a la espera/notificación del Objeto; (3) Estructura de datos subyacente (4) Principio de implementación de espera (5) Principio de implementación de señal/señal; 6) Combinación de espera y señal/señalTodos;
4.6 Herramienta LockSupport
Puntos de conocimiento: (1) Funciones principales; (2) Características en comparación con el despertador de bloqueo sincronizado;
contenedor concurrente
5.1 Contenedor concurrente ConcurrentHashMap (JDK versión 1.8)
Puntos de conocimiento: (1) atributos clave; (2) clases internas importantes; (3) operaciones CAS involucradas; (5) proceso de ejecución de colocación (6) proceso de ejecución; 8) Proceso de ejecución del método de conteo de tamaño (9) Comparación entre la versión 1.8 ConcurrentHashMap y versiones anteriores;
5.2 CopyOnWriteArrayList de contenedor concurrente
Puntos de conocimiento: (1) Principio de implementación; (2) La diferencia entre COW y ReentrantReadWriteLock; (3) Escenarios de aplicación (4) Por qué la coherencia es débil (5) Desventajas;
5.3 ConcurrentLinkedQueue de contenedor concurrente
Puntos de conocimiento: (1) Principio de implementación; (2) Estructura de datos (3) Método central (4) Intención de diseño de la actualización retrasada de HOPS;
5.4 ThreadLocal de contenedor concurrente
Puntos de conocimiento: (1) Principio de implementación; (2) Principio del método Establecer (3) Principio del método Obtener (4) Principio del método Eliminar (5) ThreadLocalMap;
Un artículo que explica en profundidad el problema de pérdida de memoria de ThreadLocal desde el código fuente.
Puntos de conocimiento: (1) Principio de pérdida de memoria de ThreadLocal (2) Mejores prácticas de ThreadLocal (3) Escenarios de aplicación;
5.5 BlockingQueue de contenedor concurrente
Puntos de conocimiento: (1) Operaciones básicas de BlockingQueue (2) BlockingQueue de uso común;
Explicación detallada de los principios de implementación de ArrayBlockingQueue y LinkedBlockingQueue en contenedores concurrentes
Grupo de subprocesos (sistema ejecutor)
6.1 Principio de implementación del grupo de subprocesos
Puntos de conocimiento: (1) ¿Por qué utilizar el grupo de subprocesos? (2) Proceso de ejecución; (3) El significado de cada parámetro del constructor; (4) Cómo cerrar el grupo de subprocesos (5) Cómo configurar el grupo de subprocesos;
6.2 ScheduledThreadPoolExecutor del grupo de subprocesos
Puntos de conocimiento: (1) Estructura de clases; (2) Métodos comunes (3) ScheduledFutureTask (3) DelayedWorkQueue;
6.3 Resumen de operaciones básicas de FutureTask
Puntos de conocimiento: (1) Varios estados de FutureTask; (2) método de obtención (3) método de cancelación (4) escenarios de aplicación (5) implementación de la interfaz Runnable;
Clase de operación atómica
7.1 Resumen de clases de operaciones atómicas en el paquete atómico en Java
Puntos de conocimiento: (1) Principio de implementación; (2) Tipo básico de actualización atómica; (3) Tipo de matriz de actualización atómica (5) Tipo de campo de actualización atómica;
Herramientas de concurrencia
8.1 En lenguaje sencillo, clases de herramientas de concurrencia de Java: CountDownLatch, CyclicBarrier
Puntos de conocimiento: (1) CountDownLatch (2) CyclicBarrier (3) Comparación entre CountDownLatch y CyclicBarrier;
8.2 Clases de herramientas de concurrencia de Java en lengua vernácula: Semaphore, Exchanger
Puntos de conocimiento: (1) Control de acceso a recursos Semáforo (2) Intercambiador de datos;
Práctica de concurrencia
9.1 Un artículo que permite entender a fondo la cuestión productor-consumidor
Gráfico de conocimiento de simultaneidad de JAVA
Puede pasar a una nueva ventana para ampliarla y verla mejor o ver la imagen original.
Enlace a la imagen original del gráfico de conocimiento. Si es útil, puede clonarlo para su propio uso.