Cuando hablemos de seguridad de subprocesos, elegiremos el método de bloqueo para solucionarlo. Los tipos de bloqueos en Java se dividen en seis tipos. Los dos métodos de bloqueo más comunes que hemos encontrado son bloqueo y sincronización. Esta es también la pregunta sobre principios y mecanismos más frecuente en las entrevistas. A continuación le mostraremos las preguntas comunes de las entrevistas en Java. Veamos si puede responderlas todas.
1.La diferencia entre efectos sincronizados en métodos estáticos y métodos no estáticos.
Métodos no estáticos:
Bloquear el objeto (puede entenderse como bloquear la memoria de este objeto. Tenga en cuenta que es solo esta memoria, otros objetos similares tendrán sus propios bloqueos de memoria. En este momento, el método de sincronización del objeto se ejecuta en más de uno). otro hilo (nota: es el objeto) generará exclusión mutua
Método estático : equivalente a bloquear la clase (* .class se encuentra en el área de código y el método estático se encuentra en el área estática. Los objetos generados por esta clase comparten este método estático, por lo que N objetos compiten por esta memoria),
En este momento , siempre que se llame al objeto generado por esta clase, se producirá exclusión mutua cuando se llame a este método estático. Es decir, todos los objetos de esta clase comparten un candado.
2. ¿Cuáles son los tipos de cerraduras?
(1) Bloqueo optimista y bloqueo pesimista
(2) Bloqueo de giro y bloqueo sin giro
(3) Cerradura reentrante y cerradura no reentrante
(4) Cerradura ligera y sin cerradura, cerradura sesgada y cerradura pesada
(5) Bloqueo mutex y bloqueo compartido
(6) Bloqueo justo y bloqueo injusto
3. Varios métodos de sincronización de subprocesos.
modificación sincronizada
volátil implementa la sincronización (solo se garantiza la visibilidad, no la atomicidad)
Utilice la variable local ThreadLocal
Utilice clases atómicas ( AtomicInteger, AtomicBoolean...)
Usar bloqueo
Utilice la clase contenedora ( BlockingQueue, ConcurrentHashMap)
4. La diferencia entre mecanismos sincronizados y de bloqueo.
sincronizado originalmente usaba el mecanismo de bloqueo pesimista de la CPU, es decir, el hilo obtuvo un bloqueo exclusivo. Un bloqueo exclusivo significa que otros subprocesos solo pueden confiar en el bloqueo para esperar a que el subproceso libere el bloqueo.
Lock utiliza un bloqueo optimista. El llamado bloqueo optimista consiste en completar una operación sin bloquear cada vez, pero asumiendo que no hay conflicto. Si falla debido a un conflicto, se volverá a intentar hasta que tenga éxito. El mecanismo para implementar el bloqueo optimista es la operación CAS (Comparar e intercambiar).
5. Hablar sobre problemas de seguridad de subprocesos.
La seguridad de subprocesos es un problema en el campo de subprocesos múltiples. La seguridad de subprocesos puede entenderse simplemente como un método o una instancia que se puede utilizar en un entorno de subprocesos múltiples sin problemas.
En la programación multiproceso de Java, se proporcionan varias formas de lograr la seguridad de los subprocesos de Java:
La forma más sencilla es utilizar la palabra clave Sincronización.
Utilice clases atómicas del paquete java.util.concurrent.atomic, como AtomicInteger
Usando bloqueos del paquete java.util.concurrent.locks
Utilice la colección segura para subprocesos ConcurrentHashMap
Utilice la palabra clave volátil para garantizar una visibilidad variable
Lo anterior es una introducción a las preguntas de la entrevista sobre bloqueos en Java. Para los puntos de conocimiento que no tiene claros, debe encontrar información a tiempo para resolverlos y fortalecer su memoria sobre el contenido del bloqueo.