Multithreading común Resumen preguntas de la entrevista

1. hilos y procesos

hilo 
 Aquí hay un hilo refiere a una entidad hilo durante la ejecución del programa. JVM permite que una aplicación al mismo tiempo la ejecución de hilos. Hotspot JVM en Java hilos y nativa de hilos del sistema operativo tiene unas asignaciones directas. Cuando el hilo de almacenamiento local, tampón de asignación, objetos de sincronización, pila, contador de programa, listo, se creará un sistema operativo subprocesos nativos. extremo del hilo de Java, se reciclará subprocesos nativos. El sistema operativo es responsable de programar todos los hilos, y asignarlos a cualquier CPU disponibles. Cuando el hilo original de inicialización se ha completado, se llamará método Java hilo run (). Al final de la rosca, libera todos los recursos hilos e hilos nativos Java.
proceso
  El proceso es un programa puede ejecutarse simultáneamente en el cálculo de la actividad en un conjunto de datos, sino también el sistema operativo de la unidad básica de la asignación de recursos y la programación.

Relaciones y diferencias entre los procesos y procedimientos

① programa es un conjunto ordenado de instrucciones, que no tiene ningún significado operacional, es un concepto estático. El proceso es un proceso de ejecución del programa en el procesador, es un concepto dinámico.

② programa de software se puede utilizar como un largo plazo existen datos, pero hay un cierto ciclo de vida del proceso. Programa es permanente, el proceso es temporal.

Nota: El programa puede ser visto como una receta, pero el proceso es el proceso de acuerdo con recetas para cocinar.

③ el proceso y los procedimientos de diferentes: procesos por un bloque de control de programa, datos, y el proceso se compone de tres partes.

④ correspondencia entre el proceso y los procedimientos: mediante la repetición, un programa puede tener múltiples procesos; por relaciones llamamiento, un proceso que puede incluir más de un programa.

2. La diferencia entre el paralelo y concurrente

  • Una explicación: se refiere a dos o más eventos paralelos se producen al mismo tiempo, y se refiere a dos o más eventos simultáneos se producen al mismo intervalos de tiempo.
  • Explicar dos: Parallel múltiples eventos en diferentes entidades, concurrentes múltiples eventos en la misma entidad.
  • Explica tres: en un procesador paralelo es "simultáneo" para manejar múltiples tareas, es al mismo tiempo manejar múltiples tareas de forma simultánea en múltiples procesadores. Como clúster hadoop distribuida.

3. Crear un modo de hilo

herencia de clases de hilo
  Esencialmente clase Thread es lograr una instancia de interfaz Ejecutable, lo que representa una instancia de un hilo. La única manera de empezar el hilo es método de instancia () por clase Entrada de rosca. método start () es un método nativo, se iniciará un nuevo hilo, y ejecuta método run ().
Implementar Ejecutable.
  Si la clase ya se extiende otra clase, no se puede extiende directamente hilo, esta vez, se puede lograr una interfaz Ejecutable
ExecutorService, Callable <Class>, Future valor de retorno de hilo
  Devuelve un valor tareas deben implementar la interfaz tarea similar que se puede llamar sin valor de retorno debe ser interface Runnable. Después de realizar la tarea que se puede llamar, se puede obtener un objeto futuro, llame al entrar en el objeto se puede llegar a la devolución de la tarea que se puede llamar de objetos, junto con las interfaces ExecutorService grupo de subprocesos se puede lograr leyendas han arrojado resultados multithreading. 
Sobre la base de la forma en que el grupo de subprocesos
  Hilos y conexiones de bases de datos Estos recursos son un recurso muy valioso. Así que cada vez que necesita para crear, destruir cuando no se necesita, puede ser un gran desperdicio de recursos. A continuación, podemos utilizar la caché estrategia es utilizar grupo de subprocesos.

4. manera de crear un grupo de subprocesos

newCachedThreadPool
  Es posible que necesite para crear un grupo de subprocesos que crea nuevos temas, sino que volverá a usar hilos ya construidos cuando esté disponible. Para muchos de programa a corto plazo para llevar a cabo tareas asíncronas, estas piscinas se suele mejorar el rendimiento del programa. Las llamadas a ejecutar se reutilizar hilos previamente construidos (si el hilo está disponible). Si un tema existente no está disponible, se crea un nuevo hilo y se añade a la piscina. Terminar y eliminar esos hilos que no se han utilizado durante 60 segundos desde la caché. Por lo tanto, durante mucho tiempo permanezca inactivo grupo de subprocesos no utiliza ningún recurso.
newFixedThreadPool
  Crea un grupo de subprocesos que se vuelve a utilizar un número fijo de hilos a una cola sin límites compartida para ejecutar estos temas. En cualquier momento, en la mayoría de nThreads hilo es tareas de procesamiento activas. Si envía tarea adicional cuando todos los hilos están activos, antes de tener hilos disponibles, tareas adicionales van a esperar en la cola. Si durante la ejecución antes del cierre debido a un fallo de cualquier hilo termina, entonces sustituirlo por un nuevo hilo para ejecutar tareas posteriores (si es necesario). Antes de que un hilo se cierra de forma explícita, siempre existirá el grupo de subprocesos.
newScheduledThreadPool
  Crea un grupo de subprocesos que los comandos de programación pueden correr después de un retraso dado, o ejecutar periódicamente. 
ScheduledThreadPool = Executors.newScheduledThreadPool El ScheduledExecutorService (3. ); 
 ScheduledThreadPool.schedule (newRunnable () { 
 @ Override 
 pública  vacío run () { 
 System.out.println ( "retraso de tres segundos" ); 
 } 
 }, 3. , TimeUnit.SECONDS); 
scheduledThreadPool .scheduleAtFixedRate (newRunnable () { 
 @ Override 
 público  void run () { 
 System.out.println ( "uno de retardo de segundo cada tres segundos para realizar un" ); 
 } 
 }, l, 3, TimeUnit.SECONDS);
newSingleThreadExecutor
  (O cuando se produce una excepción) Executors.newSingleThreadExecutor () devuelve un grupo de subprocesos (esto es sólo un hilo grupo de subprocesos), este hilo de rosca de la piscina puede reiniciar después de la muerte de un hilo para reemplazar el hilo original para continuar la ejecución! 

5. ciclo de vida de rosca (estado) 

  Cuando se crea e inicia el hilo, no es ni un comienzo para entrar en el estado de ejecución, ni se ha estado en un estado de ejecución. En el hilo del ciclo de vida, tiene que pasar por Nueva (New), Ready (Ejecutable), correr (correr), bloqueado (Bloqueado) y la muerte (Dead) 5 estados. Sobre todo cuando después de que las roscas de entrada, no puede haber sido "ocupada" la CPU para ejecutar solos, por lo que la necesidad de cambiar entre varios subprocesos de CPU, por lo que el estado de rosca se ejecutará varias veces para cambiar entre el bloqueo

Nuevo estado (NUEVO)
  Cuando el programa crea un hilo usando la nueva palabra clave, el hilo está en el estado nuevo, esta vez sólo el valor asignado por la memoria JVM, e inicializa sus variables miembro
estado Ready (RUNNABLE)
  Cuando un objeto hilo para llamar al método start (), el hilo está en el estado listo. Java pila de llamadas máquina virtual y contador de programa para crear un método, en espera de ser programado para ejecutarse
Estado de ejecución (en ejecución):
  Hilo de ejecución si el hilo está en el estado listo para obtener un método de CPU, funcionamiento de iniciado (), el hilo se está ejecutando
Bloqueado (BLOQUEADO):
  El bloqueo de los medios estatales que el hilo por alguna razón para renunciar al derecho a usar la CPU, que se deja fuera de la porción de tiempo de CPU, detener temporalmente la ejecución. Hasta que el hilo se convierte en estado ejecutable (ejecutable), tienen la oportunidad de conseguir segmento de tiempo de CPU para ejecutar (correr) estado nuevo
Estado. Caso de obstrucción de las tres categorías:
  obstrucción de espera (o.wait-> Columna de espera):
    hilo O.wait de método run () de ejecución (funcionamiento), JVM se enrosque en la cola de espera (waitting cola) en.
  bloqueo síncrona (lock-> piscina de bloqueo)
    Hilo conductor (correr) en la adquisición de objetos bloqueo de sincronización, si el bloqueo de sincronización está ocupado por otro hilo, la JVM se bloqueará en el grupo de subprocesos (piscina de bloqueo) en.
  Otro bloqueo (sueño / join)
    Hilo conductor (corriendo) se realiza método t.join () Thread.sleep (largos ms) o, o emitir la solicitud de E / S, la JVM fijará el hilo se bloquea. Cuando el sueño () de tiempo de espera, el Ingreso () o una espera de tiempo de espera para un hilo para terminar, o E / S
    Cuando se procesa, el hilo se puede ejecutar de nuevo en el estado (ejecutable). 
la muerte de rosca (DEAD)
Hilo se termina en tres formas, el fin es estado de muerte.
fin normal
1. run () o call () ejecución del método se ha completado, el final normal de la rosca.
Abend
2. Pase un error de tiro o de Excepción no detectada.
Deja de llamar
3. Llamada directa método del hilo de parada () para finalizar el hilo - que suele ser fácilmente conducir a un callejón sin salida, no se recomienda.
 

 

 6.sleep y espera diferencia

1. Para el método sleep (), en primer lugar hay que saber que pertenece clase Thread. Y el método wait (), el objeto pertenece a la clase.
2. sueño () método da como resultado un programa para suspender el tiempo especificado, por lo que la CPU de los otros hilos, pero sus restos fueron estado de vigilancia, cuando el tiempo especificado es de hasta reanudará automáticamente la operación.
3. En el proceso de la llamada al método sleep (), el hilo no liberará el bloqueo de objeto.
4. Y cuando la llamada al método wait (), el hilo renunciará a la cerradura objeto, a la espera de entrar en la piscina a la espera de una cerradura para este objeto, y sólo para esta llamada objeto notificar () de la rosca después de la cerradura objeto antes de entrar en la piscina listo para adquirir el bloqueo de objetos en funcionamiento estado

7.Inicie y correr diferencia

1. método start () para iniciar un hilo, verdaderamente operación multi-hilo. El tiempo de ejecución sin esperar a que el código cuerpo del método se ha completado, se puede proceder directamente al siguiente código.
2. Iniciar un hilo por el método de la clase Thread inicio () llamando, entonces este hilo no está en estado de servicio y no se está ejecutando.
3. El método run () se llama cuerpo hilo, que contiene los contenidos a ser ejecutados este hilo, el hilo en el estado de ejecución, que se ejecuta el código de función de ejecución. método para ejecutar acabado, este hilo se termina. Entonces CPU reprogramación de otros hilos.

El papel de la palabra clave 8.volatile (visibilidad variable prohibir la reordenación)

  lenguaje Java proporciona un mecanismo de sincronización más débil, es decir, la variable volátil utiliza para asegurar que las variables de notificación de actualización a otros hilos. las variables volátiles tienen dos características, las variables volátiles no se almacenan en caché en el registro del procesador o de otros lugares invisibles, por lo tanto siempre devuelven los valores escritos más recientemente cuando se lee la variable volátil.
variable de la visibilidad
  Una de ellas es para asegurar que la variable es visible a todas las roscas, en donde los medios de visibilidad que cuando un hilo modifica el valor de una variable, se puede obtener entonces inmediatamente los nuevos valores para los otros hilos.
prohibir la reordenación
  reordenamiento de instrucciones prohibición volátil. Más de sychronized bloqueo de sincronización de peso ligero cuando se accede a una variable volátil no lleva a cabo las operaciones de bloqueo y, por lo tanto, no hace que el subproceso de ejecución se bloquea, tan variable volátil es un mecanismo de sincronización más ligero que la palabra clave sychronized. volátil para este escenario: una variable es compartida por múltiples hilos, el hilo directamente a la asignación variable. 
  Cuando las variables de lectura y escritura no volátiles, las variables de cada copia de la memoria de inicio de tema a la caché de la CPU. Si el equipo tiene CPU múltiple, cada hilo puede ser procesado en una CPU diferente, lo que significa que cada hilo se puede copiar a un CPUcache diferente en. La declaración de una variable es volátil, JVM asegura que todas las variables de Lectura Lectura de la memoria, CPU Cache omitir este paso.
escena aplicable
  Cabe señalar que una sola lectura de una variable de operación / escritura no volátil se puede garantizar la atomicidad, tales como variables largas y dobles, pero no lo hace la atomicidad de garantía i ++ esta operación, ya que en esencia i ++ es de lectura, escritura dos operaciones . Puede ser reemplazada en algunos escenarios sincronizados. Sin embargo, no puede reemplazar completamente volátil posición sincronizada, y sólo en algunos casos especiales, con el fin de aplicar volátil. En general, las siguientes condiciones deben cumplirse con el fin de garantizar un entorno de hilo concurrente segura:
(1) el acceso de escritura a las variables no dependen en el valor actual (tal como i ++), o una simple asignación variable (booleanflag = true).
(2) la variable no está incluido en el invariante con otras variables, es decir, entre diferentes variables volátiles, no dependen unos de otros. Para utilizar volátil sólo cuando el estado es verdaderamente independiente de otros contenidos dentro del programa.

9. El principio de la primera ocurrencia

1, la secuencia de programa de reglas. En un libro de códigos EDITORIAL hilo de antemano ocurrido en la parte posterior. Más bien debe ser, de acuerdo con el flujo de control de orden del programa, debido a que algunos estructura ramificada.

2, reglas variables volátiles. En unas variables de volátiles, a escribir su primera ocurrió en la operación de lectura.

3, el hilo empezar regla. comienzo de la rosca () del objeto método primera aparición en este hilo cada movimiento.

4, el subproceso termina reglas. Todas las operaciones están por delante de la terminación del hilo se produce en la detección de este hilo.

5, rotura de hilo reglas. Llame a hilo de interrupción () para la primera aparición se detecta evento de interrupción código hilo de interrupción.

6, la terminación objeto reglas. Inicializar un objeto se completa (final del constructor línea) comienza método finilize emitido () de la primera ocurrencia.

7, transitiva. A primera ocurrencia de B, B C se produce primero, a continuación, C. A ocurre primero

8, el tubo de reglas de bloqueo. La cara de la cerradura con una operación de bloqueo después de una primera operación de desbloqueo se produce.

10. El método de las llamadas entre procesos y subprocesos

cerradura común 11.java

12.synchronized principio implementación subyacente

Lo 13.synchronized y la diferencia es ReentrantLock?

  • la competencia sincronizada siempre estará a la espera de una cerradura; ReentrantLock puede tratar de adquirir el bloqueo y llegar llegar resultados
  • sincronizado adquisición de la cerradura no se puede establecer el tiempo de espera; ReentrantLock puede establecer el tiempo de espera para adquirir un bloqueo
  • equidad sincronizada no se puede lograr de bloqueo; cerraduras ReentrantLock se encuentran justo, lo que es de esperar para entrar en la cerradura
  • y control espera sincronizadas wakeup espera objeto de bloqueo (unión) y notificar (), notifyAll (); ReentrantLock y control espera para un wakeup Condición de unión a la await () y la señal (), el método signalAll ()
  • nivel JVM sincronizado se consigue; ReentrantLock JDK es el nivel de código para lograr
  • ejecutar el bloque de código sincronizado en la cerradura o anormal, liberar automáticamente el bloqueo; de ReentrantLock no libera automáticamente el bloqueo, es necesario finally {} de bloques muestra la liberación

14.ReentrantReadWriteLock bloqueo de lectura-escritura detallada

Implementación cola de bloqueo 15.BlockingQueue

 

Supongo que te gusta

Origin www.cnblogs.com/yjc1605961523/p/12594379.html
Recomendado
Clasificación