punto de conocimiento acabado, Java preguntas de la entrevista programación concurrente (b)

EDITORIAL

Recopilado algunas preguntas gigante de Internet de cara, Preguntas Comunes de estas superficies, como ingeniero de Java también es necesario tener algún conocimiento, después de todo, la combinación de la teoría y la práctica, es el rey, la fragmentación de acabado, mordisqueando un conocimiento cada día , feliz todos los días, si tiene ayuda, recuerde que la punta de una preocupación y un punto como oh .

serie relacionados

El conocimiento acabado, MyBatis preguntas cara
conocimiento consolidación, ZooKeeper preguntas cara
conocimiento consolidación, Dubbo preguntas cara
conocimiento consolidación, Elasticsearch preguntas cara
conocimiento consolidación, Redis preguntas cara
conocimiento consolidación, MySQL se enfrentan con cuestiones
de consolidación de conocimientos, entrevista de Java programación concurrente título (a)
la consolidación de los conocimientos, las preguntas de la entrevista de Java concurrente de programación (b)

Programación concurrente tres elementos?

  • La atomicidad atomicidad se refiere a una o más operaciones, y la realización de cualquiera de todas las demás operaciones no será interrumpida durante la ejecución, o a todos sin ejecución.
  • Visibilidad La visibilidad se refiere a una pluralidad de hilos que operan variable compartida, en el que la variable de modificar un hilo, otros hilos pueden ver inmediatamente los resultados de los cambios.
  • Pedidos ordenada, es decir, la secuencia de ejecución del programa realizado en el código de pedido.

Manera de lograr la visibilidad de qué?

sincronizada o Bloqueo: para asegurarse de que sólo un hilo al mismo tiempo adquirir la ejecución del código de bloqueo, antes del lanzamiento del último valor de la cerradura se sonrojó a la memoria principal, para lograr la visibilidad.

El valor de multi-hilo?

  • Juega a las ventajas de múltiples hilos multi-núcleo de la CPU, que puede jugar realmente las ventajas de la CPU multi-núcleo para lograr el objetivo de la plena utilización de la CPU, enfoque multi-hilo a la realización de varias cosas al mismo tiempo sin que interfieran entre sí.
  • Evitar la obstrucción desde el punto de vista de programa de eficiencia, no sólo multihilo de un solo núcleo CPU no jugará ventaja, ya que se pueden ejecutar en un solo núcleo de la CPU multithreading conducen a cambios de contexto hilo, y reducir la eficiencia general del programa. Pero todavía tenemos que aplicaciones multi-hilo de la CPU de un solo núcleo, es para evitar la obstrucción. Pensemos, si es antes de la CPU de un solo núcleo utilizando un solo hilo, por lo que el tiempo que este hilo se bloquea, dicen unos datos de forma remota lo leen, el par aún no ha sido devuelto y ningún conjunto de tiempo de espera, entonces el programa completo en la parte trasera de datos de retorno dejado de funcionar. Multithreading puede evitar este problema, un número de hilos de ejecutar simultáneamente, incluso si un hilo de ejecución de código para leer datos bloqueados, que no afectará a la ejecución de otras tareas.
  • Esta facilidad de modelado es otra de las ventajas obvias de no tan. Suponga que tiene una gran tarea A, la programación de un único subproceso, a continuación, debe tener en cuenta una gran cantidad, a construir todo el modelo de programa es demasiado problema. Pero si esta gran tarea Un descompone en varias pequeñas tareas, la tarea B, C tarea, la tarea D, se establecieron modelo de programa y ejecutar estas tareas a través de múltiples hilos, respectivamente, entonces mucho más simple.

¿Cuáles son las formas de crear un hilo?

  • Se crea la clase de herencia de clase hilo de rosca
  • Crear hilos a través de la clase de interfaz Ejecutable
  • Crear un hilo a través de Callable y Futuro
  • Creado por un grupo de subprocesos

Comparación de tres maneras de crear un hilo?

  • Adoptada para lograr Ejecutable, así que se puede llamar para crear interfaz multi-hilo

Las ventajas son : Clase único hilo implementa la interfaz Ejecutable o interfaz invocable, también se puede heredar de otras clases. De esta manera, múltiples hilos pueden compartir el mismo objeto de destino, es la misma para una pluralidad de hilos para hacer frente a un caso en que los mismos recursos, que pueden separarse para formar un modelo claro de la CPU, de código y de datos, para reflejar mejor la pensamiento orientado a objetos.
Las desventajas son : la programación de un poco más complicado, si desea acceder al hilo actual, debe utilizar el Thread.currentThread()método.

  • Crear el uso de múltiples hebras de la herencia de clases Tema

Las ventajas son : a escritura sencilla, si necesita acceso a la hebra actual, que no es necesario utilizar el método Thread.currentThread (), el uso directo de este para obtener el hilo actual.
Las desventajas son : la clase Thread clase Thread ha sido heredado, por lo que no pueden heredar otro padre.

  • La diferencia Ejecutable y rescatable
    • Callable predeterminado (override) es una llamada al método (), Ejecutable predeterminado se método run (override) ().
    • tareas rescatables se pueden ejecutar después de que el valor de retorno, y la tarea Ejecutable no es el valor de retorno.
    • método de llamada puede lanzar una excepción, el método no puede funcionar.
    • tarea que se puede llamar correr puede obtener un objeto futuro que representa el resultado de un cálculo asíncrono. Proporciona un método de comprobación de cálculo es completa, a esperar a la finalización del cálculo, y el cálculo del resultado de búsqueda. Por Future objeto puede comprender la ejecución del mandato, para cancelar la ejecución de la tarea, sino también obtener los resultados.

En quinto hilo de Java tiene un estado básico

  • Nuevo estado (Nuevo) : Cuando el objeto hilo después de la creación, es decir, en el nuevo estado, tales como:Thread t = new MyThread();
  • estado preparado (Ejecutable) : Cuando el método start () (el objeto subproceso de llamada t.start();), el hilo que es estado preparado. Hilo en el estado preparado, es ilustrativa de este hilo está listo, en espera de la CPU programado para su ejecución en cualquier momento, no quiere decir que la aplicación de la t.Start () Este hilo se ejecutará inmediatamente;
  • Estado (corriendo) que se ejecuta : Cuando la programación de subprocesos de la CPU se pone en marcha en un estado preparado, y esta vez fue capaz de ejecutar realmente los hilos que van en modo de ejecución. Nota: listo estado es el único medio de acceso al estado de funcionamiento, es decir, la ejecución del hilo con el fin de entrar en el estado de ejecución, en primer lugar debe estar en un estado de preparación;
  • Bloqueado (bloqueado) : correr el hilo por alguna razón, abandonar temporalmente el derecho de uso de la CPU, detener la ejecución, esta vez en el bloque hasta que entra en el estado preparado, tener la oportunidad de entrar en la CPU se llama de nuevo a un estado operativo.

Dependiendo de la razón para el bloqueo generado, estado de bloqueo se puede dividir en tres tipos :

  • Espera de bloqueo : un hilo de ejecución correr Estado Espere método (), de manera que el hilo entra en la obstrucción del estado de espera;
  • bloqueo síncrono : obtener fracaso bloqueo de sincronización hilo sincronizada (porque la cerradura estaba ocupado por otro hilo), entrará en el estado de bloqueo síncrono;
  • Otro bloqueo : El sueño () o unirse a la subproceso de llamada () o emitidos I / O solicitud, el hilo en el estado bloqueado. Cuando el sueño () de tiempo de espera, el Ingreso () o una espera de tiempo de espera para un hilo para terminar, o I / O se ha completado el procesamiento, el hilo en el estado listo de nuevo.
  • estado de muerte (Dead) : ejecución del hilo es de más o debido a la salida anormal del método run (), el extremo del hilo del ciclo de vida.

¿Cuál es la agrupación de hebras? ¿Cuáles son las diferentes formas de crear?

Avanzar en el grupo de subprocesos es crear varios hilos, si hay necesidad de hacer frente a la tarea, el hilo grupo de subprocesos se encargará de la tarea, después de procesar hilos y no será destruida, pero la espera para la siguiente tarea. Debido a crear y destruir hilos están consumiendo recursos del sistema, por lo que cuando se desea la creación frecuente y la destrucción de hilos puede considerar el uso del grupo de subprocesos para mejorar el rendimiento del sistema. Java proporciona una java.util.concurrent.Executorimplementación de la interfaz que se utiliza para crear un grupo de subprocesos.

La creación de la piscina Cuatro hilo

  • newCachedThreadPool crear un grupo de subprocesos cacheables
  • newFixedThreadPool crear un grupo de subprocesos de tamaño fijo, se puede controlar el número máximo de subprocesos simultáneos.
  • newScheduledThreadPool crear un grupo de subprocesos de tamaño fijo para apoyar la ejecución de la tarea regular y periódica.
  • newSingleThreadExecutor crear un grupo de subproceso único hilo, sólo lo utiliza para llevar a cabo la tarea sólo subprocesos de trabajo.

Enhebrar ventaja de la piscina?

  • Reutilización hilos existentes, lo que reduce la sobrecarga de la creación de objetos destruido.
  • Puede controlar eficazmente el número máximo de hilos concurrentes, mejorar la utilización de recursos del sistema, evitando al mismo tiempo la excesiva competencia por los recursos, a la obstrucción evitar.
  • Proporciona sincronización ejecuta para realizar el control de regular, de un solo subproceso, concurrente.

herramientas comunes de concurrencia Qué?

  • CountDownLatch
  • CyclicBarrier
  • Semáforo
  • intercambiador

CyclicBarrier y la diferencia CountDownLatch

  • CountDownLatch simplemente significa que un hilo que esperar hasta que se espera de su ejecución se completaron otro hilo y llama de cuenta atrás () para ser notificado cuando el subproceso actual puede continuar la ejecución.
  • cyclicBarrier todos los hilos espera hasta que todos los hilos están listos para entrar en el método Await () después de que todas las discusiones iniciadas!
  • CountDownLatch contador sólo puede utilizarse una vez. El contador puede ser utilizado de restablecimiento CyclicBarrier () para restablecer. Así CyclicBarrier puede manejar escenarios de negocio más complejos, como por ejemplo si se produce un error de cálculo, puede restablecer el contador, y dejar que los hilos se ejecutan una vez más.
  • CyclicBarrier también proporciona otros métodos útiles, tales como getNumberWaiting maneras de obtener el número de hilos CyclicBarrier bloqueado. método IsBroken se utiliza para saber si el hilo bloqueado se interrumpe. Devuelve true si se interrumpe, de lo contrario falsas.

sincronizada acción?

En Java, palabra clave sincronizada se utiliza para controlar la sincronización de hilos, es decir, en un entorno multiproceso, los segmentos de código de control no se sincronizan ejecución simultánea de múltiples hilos. sincronizado ya sea añadido a la pieza de código puede añadirse al método.

El papel de la palabra clave volátiles

Para la visibilidad, Java proporciona la palabra clave volátil para asegurar la visibilidad. Cuando una variable compartida se declara volátil, se asegurará de que los valores modificados se actualizan inmediatamente a la memoria principal, cuando hay otros temas necesitan leer, se lee el nuevo valor en la memoria. Desde un punto de vista práctico, un papel importante es volátil y CAS combina para garantizar la atomicidad, detalles se pueden encontrar bajo la categoría de paquete java.util.concurrent.atomic, tales AtomicInteger.

¿Cuál es CAS

CAS es una abreviatura de comparar y de intercambio, que es lo que llamamos el intercambio comparativo. CAS es una operación basada en la cerradura, y es el bloqueo optimista. En bloqueo de Java en el bloqueo optimista y pesimista. Bloqueo pesimista está bloqueado recursos, como después de un hilo libera el bloqueo antes de obtener el bloqueo, el siguiente acceso hilo lata. El bloqueo optimista teniendo un enfoque amplio de recursos de procesamiento al no bloqueo de alguna manera, como por ejemplo la obtención de los datos mediante la adición a la versión de registro, un rendimiento de bloqueo más pesimista ha mejorado en gran medida.

operación CAS incluye tres operandos - una posición de memoria (V), se espera que el valor original (A) y el nuevo valor (B). Si el valor de la dirección de la memoria y el valor de A que es lo mismo, a continuación, los valores se actualizará a la memoria en el interior B. CAS es para obtener los datos a través de un bucle infinito, Ruoguo ciclo en la primera ronda, un hilo se mete dentro del valor de la dirección se modifica b-roscado, a continuación, que necesita un hilo a ciclo de centrifugado a la próxima oportunidad posible llevar a cabo. java.util.concurrent.atomicLa mayoría de los paquetes debajo de la clase de operación se implementa CAS ( AtomicInteger,AtomicBoolean,AtomicLong).

cuestiones CAS

  • CAS es probable que cause un ABA problema
    hilo de un valor numérico en un b, y luego lo cambiaron a una, CAS considera en este momento no ha cambiado, de hecho, ha cambiado también, y la solución a este problema, puede utilizar el número de versión para identificar cada además de una operación de versión 1. En java5 se ha previsto AtomicStampedReference para resolver el problema.
  • Los bloques de código no se puede garantizar la atomicidad de
    operaciones atómicas para asegurar el conocimiento mecanismo de CAS de una variable, y no pueden garantizar los átomos de todo el bloque de código. Tales como la necesidad de garantizar que tres variables comunes a la actualización atomicidad, usted tiene que utilizar una transferencia sincronizada.
  • CAS causa un aumento de la utilización de la CPU
    dijo que el proceso de CAS hay un ciclo antes de que el juez, si el hilo no ha adquirido el carácter, siempre estarán ocupados recursos de la CPU.

¿Cuál es el futuro?

En la programación concurrente, a menudo utilizamos el modelo de no-bloqueo, para lograr los tres anteriores multi-hilo, ya sea heredada o implementar interfaces ejecutables clase de hilo, no pueden garantizar la aplicación de los resultados previos obtenidos. Mediante la implementación de la interfaz de devolución de llamada y puede ser recibida por el Futuro resultado de la ejecución de subprocesos múltiples. Futuro representa el resultado puede no tener un completo tareas asíncronas para este resultado puede ser añadido de devolución de llamada con el fin de realizar la acción apropiada después del éxito o el fracaso ejecución de la tarea.

¿Cuál es el AQS

AQS es AbustactQueuedSynchronizercorto, es una herramientas basadas en Java para mejorar la sincronización de nivel, el estado de sincronización representado por una variable de tipo int, y proporciona una serie de operaciones CAS para gestionar el estado sincronizado. AQS se utiliza para construir un bloqueo de imagen y un sincronizador, utilizando AQS se puede construir de forma sencilla y eficaz un gran número de sincronizador ampliamente, tal como mencionamos ReentrantLock, Semáforo, otros tal ReentrantReadWriteLock,SynchronousQueue,FutureTaskcomo son todos basados en el AQS.

AQS soporta tanto el modo síncrono

  • fórmula exclusiva
  • compartido

Tal fácil de usar implementar diferentes tipos de componente de sincronización de ReentrantLock como exclusivas, compartidas, tales como semáforos, CountDownLatch, como ReentrantReadWriteLock modular. En resumen, AQS proporciona soporte subyacente para el uso, cómo montar lograr, los usuarios pueden jugar gratis.

¿Cuál es ReadWriteLock

Primera mirada clara, por no decir ReentrantLock malo, sólo ReentrantLock veces tienen limitaciones. Si utiliza ReentrantLock, puede ser él mismo con el fin de evitar que los datos de escritura hilo A, los datos inconsistencias hilo B en los datos leídos causado, pero de esta manera, si el hilo C en la lectura de datos, el hilo D también datos leídos, los datos leídos no va a cambiar los datos, no es necesario bloquear, pero todavía encerrado, lo que reduce el rendimiento del programa. Debido a esto, antes del nacimiento de la ReadWriteLock bloqueo de lectura-escritura. ReadWriteLock las interfaces es un bloqueo de lectura-escritura, es una implementación específica ReentrantReadWriteLock con interfaz ReadWriteLock, se da cuenta de la separación de leer y escribir, un bloqueo de lectura es compartida, exclusiva bloqueo de escritura no es mutuamente exclusivo de escritura y lectura, leer y escribir, se excluyen mutuamente entre la escritura y lectura, de escritura y de escritura, lectura y escritura mejora el rendimiento.

¿Cuál es FutureTask

Este hecho se ha mencionado anteriormente, FutureTask indica que la tarea de una operación asíncrona. FutureTask que puede pasar a una clase de implementación rescatable puede hacer que esperar a que el acceso a los resultados de las operaciones asíncronas de tareas, se ha completado, se determina si se cancelan las tareas de operación. Por supuesto, ya FutureTask también Ejecutable clase de implementación de interfaz, por lo FutureTask también puede ser colocado en el grupo de subprocesos.

La diferencia entre sincronizada y ReentrantLock

sincronizado y es if、else、for、whilela misma palabra clave, ReentrantLock es de clase, que es la diferencia esencial entre los dos. Desde ReentrantLock es una clase, entonces se proporciona más flexibilidad que las características sincronizados pueden ser heredados, hay maneras en que puede, se puede tomar una variedad de variables de clase, escalabilidad ReentrantLock sincronizado que se refleja en los puntos:

  • ReentrantLock se puede configurar para adquirir el tiempo de espera de bloqueo, evitando así estancamiento
  • ReentrantLock puede obtener información sobre las distintas cerraduras
  • ReentrantLock la flexibilidad para implementar la notificación multicanal Además, tanto el mecanismo de bloqueo no es en realidad el mismo. ReentrantLock llamadas de bajo nivel que los métodos no seguros parque de bloqueo, el funcionamiento sincronizado debe ser la marca cabecera del asunto, que no puedo determinar.

¿Cuál es el bloqueo optimista y pesimista

El bloqueo optimista: Como su nombre indica, por cuestiones de seguridad hilo entre las operaciones concurrentes generados estado optimista, el bloqueo optimista que la competencia no siempre sucede, por lo que no es necesario para mantener el bloqueo, la comparación - en lugar de estas dos acciones como una operación atómica intentos para modificar las variables en la memoria, si falla dicho conflicto, entonces debe haber una lógica de reintento correspondiente.

Bloqueo pesimista: o, como su nombre indica, por cuestiones de seguridad hilo entre operaciones simultáneas generadas un estado pesimista, el bloqueo pesimista de que la competencia siempre suceder, por lo que cada vez que una operación de recursos, llevará a cabo un bloqueo exclusivo, como sincronizado, se quiera o no, que operan directamente sobre el bloqueo en el recurso.

Enhebrar un hilo B saber cómo modificar las variables

  • variables de modificadores volátiles
  • variables modifican método de modificación sincronizada
  • espere / notificar
  • mientras sondea

sincronizado, volátiles, CAS comparar

  • cerraduras pesimistas sincronizadas, son de preferencia, otros hilos causarán obstrucción.
  • volátiles de variables múltiples subprocesos compartidos proporcionan visibilidad y prohíbe la enseñanza reordenación de optimización.
  • CAS se basa en la detección de conflictos de bloqueo optimista (no-bloqueo)

método de sueño y el método wait ¿Cuál es la diferencia?

Se le pide a menudo a esta pregunta, el método de sueño y el método de espera puede ser utilizado para dar un poco de tiempo de CPU, excepto que si el hilo que sostiene un monitor objeto, método del sueño no se rinde el monitor de este objeto, el método espera renunciará a este monitor de objeto

Lo que ThreadLocal? ¿Para qué sirve?

ThreadLocal hilo es una copia local de las herramientas variables. Principalmente para la copia privada del objeto almacenado en el hilo y el hilo de hacer una asignación, variable entre hilos individuales sin perturbar el uno al otro, en unos escenarios altamente concurrentes puede lograrse sin llamadas de estado, especialmente para valores de las variables dependientes cada hilo no tiene sentido operaciones escenas completas. En pocas palabras ThreadLocal es una especie de espacio para la aproximación del tiempo, en el que cada hilo para mantener una dirección abierta implementación del método ThreadLocal.ThreadLocalMap, el aislamiento de datos, los datos no es compartida, como es natural, no hay duda del hilo de seguridad.

¿Por qué método wait (), y el método notificar () / notify () para ser invocadas en los bloques de sincronización

Este método de JDK es obligatoria, wait (), y notificar método () / notify () debe obtener primero el objeto antes de llamar a la cerradura

sincronización multi-hilo, que tiene varios métodos?

palabra clave sincronizada, Bloquear bloquea de bloqueo distribuido.

política de programación de subprocesos

Enhebrar selecciona programador de la más alta prioridad de rosca para funcionar, sin embargo, si ocurre lo siguiente, se dará por terminado el hilo conductor:

  • cuerpo de hilo llamado formas de rendimiento para salir del derecho a ocupar la CPU
  • cuerpo de hilo llamado método de dormir permite que el hilo a dormir
  • operación IO está bloqueado porque el hilo
  • Además un alto aparece subproceso de prioridad
  • En el sistema admite porción de tiempo, intervalo de tiempo de la rosca se agota

¿Cuál es el grado de concurrencia ConcurrentHashMap

ConcurrentHashMap concurrencia es el tamaño del segmento, el valor predeterminado es 16, lo que significa que no puede ser de hasta 16 hilos que operan simultáneamente ConcurrentHashMap, que es la mayor ventaja de la Hashtable ConcurrentHashMap, en cualquier caso, hay dos hilos simultáneamente Hashtable puede obtener el Hashtable datos?

¿Cómo encontrar entorno Linux por cuál de ellos utiliza la CPU más larga

  • proyectos de adquisición pid, JPS o ps -ef | grep java, han hablado de esto en frente
  • superior -H -p pid, el orden no se puede cambiar

Java puntos muertos y cómo evitar?

Java es una programación en una situación de bloqueo en la que dos o más hilos están bloqueadas de forma permanente, Java situación de bloqueo al menos dos hilos y dos o más recursos. Java causa de estancamiento son: Se ha producido Cruz al solicitar un bloqueo de la aplicación de circuito cerrado.

Causa de un callejón sin salida

  • Múltiples hilos implica múltiples cerraduras, estas cerraduras hay cruz, que podría conducir a un bucle de bloqueo de dependencia .
    Por ejemplo: en el caso de hilos de conseguir bloqueado A y no liberar el bloqueo de aplicación B, entonces, se ha ganado otro bloqueo de rosca B, y B antes de liberar el bloqueo debe obtener primero un bloqueo A, y el bucle, por lo tanto cerrado se produce, el ciclo de interbloqueo .
  • El funcionamiento de la aplicación de bloqueo predeterminado es bloqueado .
    Así que para evitar el estancamiento, es necesario en el caso de un múltiplo de bloqueo de la cara objetos se cruzan, debemos examinar cuidadosamente todos los métodos de la clase de estos objetos, si existe la posibilidad de llevar a bucle de enganche de la dependencia. Con todo, tratar de evitar otros objetos y métodos retardo llamadas de método de sincronización en un enfoque síncrono.

¿Cómo despertar a un hilo bloqueado

Si el hilo está bloqueado porque la espera de llamadas (), dormir () o método join () causado, puede interrumpir las discusiones, y para activarlo lanzando InterruptedException; si el proceso de IO se encuentra con una obstrucción, no hacer nada, porque el sistema operativo IO aplicación, el código Java y no hay manera directa el acceso al sistema operativo.

Los objetos inmutables van a ayudar multihilo

Hay un problema mencionado en lo anterior, el objeto inmutable para asegurar la visibilidad de los objetos de memoria, para leer objeto inmutable no requiere medios de sincronización adicionales para mejorar la eficiencia de la ejecución de código.

¿Qué es cambio de contexto multi-roscado

cambio de contexto Multi-hilo se refiere al control del interruptor de CPU de un hilo ya se está ejecutando a otro lugar y espera para el proceso de obtención de la ejecución de los hilos de la CPU.

Si envía la tarea, la cola de grupo de subprocesos está llena, entonces, ¿qué va a pasar

Aquí se distingue entre:

  • Si está utilizando LinkedBlockingQueue cola sin límites, la cola no tiene límites, entonces no importa, seguir añadiendo tareas a la cola de bloqueo a la espera de ser ejecutado, porque LinkedBlockingQueue se puede considerar casi una cola infinita, se puede almacenar un número ilimitado de tareas
  • Si se trata de cola acotada utiliza tales ArrayBlockingQueue, la primera tarea será añadido a la ArrayBlockingQueue, ArrayBlockingQueue completa, se incrementará el número de hilos valor maximumPoolSize, si el aumento del número de hilos o mango, sin embargo, continuará ArrayBlockingQueue completa, que será utilizado RejectedExecutionHandler procesamiento de directivas tareas rechazo es completo, el valor predeterminado es AbortPolicy

Lo que se utiliza algoritmo de programación Java hilo

Preventiva. Después de un hilo quede sin CPU, se calculará el sistema operativo basado en una prioridad total de subproceso de prioridad, la situación de hambre hilo y otros datos y asignar el próximo segmento de tiempo para ejecutar un hilo.

¿Cuál es el planificador de hilos (Thread Scheduler) y la segmentación de tiempo (timeslicing)?

planificador de hilos es un servicio de sistema operativo, que es responsable del estado de la asignación de hebra ejecutable de tiempo de CPU. Una vez que creamos un hilo y ponerlo en marcha, que dependerá de la implementación de la aplicación del programador de subprocesos. Se refiere a la porción de tiempo proceso es el tiempo de CPU disponible asignado a un hilo disponible Ejecutable. Asigna tiempo de CPU puede subproceso de prioridad o de hilos de espera en. la programación de subprocesos no está controlado por la máquina virtual de Java, por lo que la aplicación controle que es una mejor opción (es decir, no deje que su aplicación depende de la prioridad de la rosca).

¿Cuál es la vuelta

Muchos código sincronizado dentro de un código muy simple, el tiempo de ejecución muy rápido, a continuación, esperar a que el bloqueo de rosca podría ser una menos digno de operación, debido a que el hilo de bloqueo de cuestiones relacionadas con el modo de usuario y cambio de modo de núcleo. Dado que la ejecución de código dentro de la sincronizada muy rápido, espera de let por el hilo de bloqueo no está bloqueado, pero no ocupado que circula en la frontera sincronizada, esto es centrifugado. Si usted no encuentra que muchas veces reciben bloqueo ciclo ocupado, y luego bloqueadas, esto puede ser una mejor estrategia.

Lo JavaConcurrencyAPI la Interfaz de bloqueo (Lockinterface) sí? El contraste es la sincronización Hay alguna ventaja?

bloques Lock Interfaz de sincronización que el método de sincronización y proporcionan operación de bloqueo más escalable. Permiten que una estructura más flexible, puede tener propiedades completamente diferentes, y puede soportar una pluralidad de condiciones relacionadas con las clases de objetos. Sus ventajas son:

  • Puede bloquear más justo
  • El hilo puede interrumpir el tiempo de respuesta de la espera de la cerradura
  • Permite intentos de rosca a adquirir el bloqueo y vuelve inmediatamente cuando no se puede obtener el bloqueo o esperar algún tiempo
  • Puede, adquisición y liberación cerraduras en un orden diferente en un rango diferente

Seguridad de los hilos patrón Singleton

un problema común, la primera cosa a decir es medios compatibles con el proceso patrón Singleton: una instancia de una clase sólo se creará una vez en un entorno multiproceso. Hay muchos casos de un solo modo de escribir, resumo:

  • Escribiendo ejemplo, el hombre solo modo de hambre: Seguridad de los hilos
  • estilo de escritura perezosa patrón Singleton: no seguro para subprocesos
  • Dobles únicos redacción de detección de bloqueo: Hilo de seguridad

¿Cuál es el papel de semáforo

Semáforo es un semáforo, su papel es limitar el número de cierto bloque de código concurrente. Semáforo tiene un constructor, puede pasar un entero de tipo int n, representa un fragmento de código a lo sumo n hilos pueden tener acceso, si se excede n, entonces por favor espere hasta que un hilo completa este bloque de código, el siguiente hilo reentrada. Puede verse que si el entrante Semáforo tipo constructor número entero int n = 1, el equivalente en una sincronizada.

¿Qué clase de Ejecutores es?

Ejecutores proporciona herramientas método ejecutor, ExecutorService, ScheduledExecutorService, ThreadFactory y clases que se puede llamar. Ejecutores se pueden utilizar para crear fácilmente un grupo de subprocesos

Tema clase constructor, que se llama un bloque estático que hilo

Se trata de una serie de preguntas muy difíciles y complicadas. Recuerde: constructor de la clase Thread, bloque estático es donde el nuevo hilo de rosca es la clase llamada, y ejecutar el código dentro del método está siendo llamado por el mismo hilo. Si la declaración anterior hace que se siente confundido, entonces me pongo un ejemplo, supongamos que Thread2 en una nueva Thread1, la función principal de la nueva Thread2, entonces: 1, los métodos de construcción Thread2, bloque estático es un hilo, llamadas principales Thread2 la ejecución () método constructor 2, el Thread1 Thread2 su llamada, los bloques estáticos son llamados Thread2, Thread1 el método run () se invoca su Thread1

Método de sincronización y el bloque sincronizado, el cual es la mejor opción?

Sincronizar los bloques, lo que significa que el código fuera del bloque de sincronización es asíncrona, que mejoran aún más la eficiencia del proceso general de código síncrono. Por favor, sepan que un principio: cuando la sincronización posible.

número de hilos de Java en exceso puede causar algo inusual?

  • coste del ciclo de vida es muy alta densidad de hilos
  • Consumir demasiados recursos de CPU si el número de hilos que pueden correr más que el número de procesadores disponibles, entonces no será subprocesos inactivos. Un gran número de hebras en espera se llevará una gran cantidad de memoria, para ejercer presión sobre el recolector de basura, y un gran número de hilos incurrirá en los gastos generales de funcionamiento otra hora de competir por recursos de la CPU.
  • La estabilidad de la presencia de una JVM reducción limitada en el número de hilos puede ser creado, este límite variará con la plataforma y recibir una pluralidad de factores, incluyendo el tamaño de la JVM inicio pila solicitud parámetro del constructor Thread, y las restricciones sobre el hilo subyacente sistema operativo y así sucesivamente. Si la destrucción de estas restricciones, es posible lanzar un OutOfMemoryError.
Publicados 122 artículos originales · ganado elogios 591 · Vistas 1,08 millones +

Supongo que te gusta

Origin blog.csdn.net/DBC_121/article/details/104823383
Recomendado
Clasificación