preguntas de la entrevista de Java (4) - Multihilo

Java multi-threading, que tiene varias maneras.

Ejecutable aperos, utensilios rescatable, se extiende hilo


Exigible y Futuro, la comprensión de FutureTask.
las interfaces no desembolsadas, y futuros están bajo el paquete Juc.
Invocable puede realizar tareas asíncronas, generales y presentar métodos utilizados ExecutorService juntos.
Futuro puede supervisar la tarea se ha completado, si desea cancelar, cancelar el trabajo y obtener el (operación de bloqueo) resultado.
FutureTask:
implementos Ejecutable y futuro, por lo tanto las ventajas de ambos.
Puede utilizar cualquiera ExecutorService, también se puede usar el hilo.
 

Exigible y futuro de la comprensión.

las interfaces no desembolsadas, y futuros están bajo el paquete Juc.
Invocable puede realizar tareas asíncronas, generales y presentar métodos utilizados ExecutorService juntos.
Futuro puede supervisar la tarea se ha completado, si desea cancelar, cancelar el trabajo y obtener el (operación de bloqueo) resultado.
FutureTask:
implementos Ejecutable y futuro, por lo tanto las ventajas de ambos.
Puede utilizar cualquiera ExecutorService, también se puede usar el hilo.

¿Cuáles son los parámetros del grupo de subprocesos, para crear un hilo en el proceso de agrupación de hebras.

El núcleo argumento:
WorkQueue: Antes de realizar tareas de mantenimiento de la cola.
KeepAliveTime: el número de hilos que el número de la base de hilos, hilos ociosos esperando por horas extraordinarias de trabajo (en nanosegundos).
corePoolSize: siendo el tamaño mínimo de la agrupación activa núcleo
maximumPoolSize: piscina de rosca máxima
para crear formas:
newCachedThreadPool:
crear un grupo de subprocesos caché, grupo de subprocesos más tiempo que si las necesidades de tratamiento, la flexibilidad de recuperar hilo vacío, si no es reciclable, el nuevo hilo.

newFixedThreadPool:
crear un grupo de subprocesos de tamaño fijo, se puede controlar el número máximo de subprocesos simultáneos, el exceso de hilos va a esperar en la cola.

newScheduledThreadPool: 
crear un grupo de subprocesos de longitud fija para apoyar la ejecución de la tarea regular y periódica.

newSingleThreadExecutor:
crear una piscina de un solo subproceso hilo, lo utilizan sólo para realizar la tarea sólo subprocesos de trabajo para asegurar que todas las tareas se llevan a cabo en un orden especificado (FIFO, LIFO, prioridades).

newWorkStealingPool:
el JDK 1.8 después de que el nuevo cabo, con el fin de evitar la excesiva grupo de subprocesos habilitado, uso de la CPU tiempo de inactividad excesivo causado por el proyecto. Adaptado para realizar múltiples tareas y cada tarea requiere menos tiempo. 4 formas de arriba son propensos a ocupar intensivo de la CPU pasa.

Proceso de creación:
1, para determinar los hilos de núcleo grupo de subprocesos están en una misión, si no (hilo de núcleo está inactivo o no hay hilo de núcleo se crea) está trabajando para crear un nuevo hilo para ejecutar la tarea. Si los hilos de núcleo están en una misión, a continuación, introduzca el siguiente proceso.

2, el grupo de subprocesos para determinar si la cola de trabajo es completa, si la cola de trabajo no está lleno, la tarea se almacena en la cola de trabajos recién presentado. Si la cola de trabajo está lleno, a continuación, introduzca el siguiente proceso.

3, para determinar si los hilos de rosca de la piscina están en condiciones de trabajo, si no es así, crear un nuevo subproceso de trabajo para llevar a cabo la tarea. Si está lleno, a continuación, a la estrategia de saturación para hacer frente a esta tarea.

Volitile papel clave, principios.

Asegurar la visibilidad de la memoria:
Visibilidad de memoria (memoria de visibilidad): todas las discusiones pueden ver el estado más reciente de la memoria compartida.
Antes de cada lectura debe comenzar con el principal valor de actualización de memoria de datos.
Después de cada escritura debe ser sincronizado de nuevo a la memoria principal de ellos inmediatamente.
La prevención de las instrucciones de reordenamiento:
palabra clave volátil para evitar que las instrucciones se reordenan por "barrera de la memoria."
A fin de lograr la semántica de memoria volátil, el compilador cuando se inserta el código de bytes de generación en la barrera de memoria secuencia de instrucciones para inhibir un tipo particular de reordenamiento procesador.
(Caso de carga Lazy es un caso de un solo modo de realización, el modelo de memoria de instrucciones sucede-Antes de reordenamiento produce dos objetos)
no puede garantizar la atomicidad:
Esta variable se limita al átomo (incluyendo una referencia) para leer y escribir, no puede cubrir cualesquiera operaciones sobre las variables (por ejemplo, contar ++)

https://www.cnblogs.com/monkeysayhi/p/7654460.html

Use palabras clave de sincronizados, ventajas y desventajas.

Uso:
el método, proceso, bloque, dependiendo de la cerradura objeto.
Ventajas:
asegurar relación de sincronización entre el hilo que es.
Sincronizada exclusiva innata, la reentrada.
jdk1.6 después de que el bloqueo ha sido optimizado para sincronizada, que contiene bloqueo parcial, de peso ligero de bloqueo, bloqueo de peso pesado.
Contras:
No hay manera de establecer el tiempo de espera para adquirir el bloqueo puede resultar en un estado bloqueado de forma indefinida.
Para las aplicaciones de lectura y escritura a menos que es muy negativo, ya que aunque aparentemente más lectores pueden ejecutarse simultáneamente, pero en realidad todavía en serie, y finalmente conducirá a una disminución del rendimiento concurrente.

https://www.jianshu.com/p/d53bf830fa09

Interfaz de seguridad para lograr que clase, lo utilizan escenarios Sí.

clase de implementación de ReentrantLock, que significa "bloqueo de reentrada", la operación puede ser interrumpida adquirir la cerradura, el tiempo de espera adquisición de bloqueo se puede ajustar.
Implementar la ReadWriteLock interfaz. cerraduras de lectura y escritura permiten que múltiples hilos se ejecutan concurrentemente, pero no permite la escritura y lectura hilos se ejecutan simultáneamente hilos, el hilo no se le permite escribir y escribir hilos se ejecutan simultáneamente.
ReentrantReadWriteLock implementado en ReadWriteLock, leer y escribir al mismo tiempo el acceso permitido por múltiples hilos leen, pero el acceso de escritura al hilo, todas las discusiones leen y escriben otros hilos se bloquean.

Opciones de equidad: equidad de apoyo no (por defecto) adquisición de bloqueo y de manera equitativa, el rendimiento es mejor que justa o injusta;
reentrada: pueden obtener apoyo una vez más re-entrada, después de leer adquisición de bloqueo se puede obtener de nuevo, después de un bloqueo de escritura de adquisición bloqueos de escritura, sino también para adquirir un bloqueo de lectura;
rebaja de bloqueo: seguimiento obtener un bloqueo de escritura, a continuación, suelte el fin de obtener un bloqueo de lectura de bloqueo de escritura, bloqueo de escritura para ser capaz de degradar un bloqueo de lectura.

https://www.jianshu.com/p/4a624281235e

Comparativo sincronizada y la cerradura.

cerradura permite que otros subprocesos intentan obtener un bloqueo a la espera de algún tiempo. La modificación sincronizada del bloque de código se ejecuta, con el fin de liberar el bloqueo. O hilo de ejecución se produce una excepción, JVM enhebrar automáticamente libera el bloqueo.
Leer y escribir, escribir y escribir los conflictos van a suceder, pero leer y leer las operaciones no entran en conflicto, la cerradura se puede permitir que esta operación puede llevarse a cabo de forma simultánea. (Bloqueo de lectura-escritura)
de bloqueo no puede conocer el mensaje ha adquirido con éxito la cerradura.
Cuando los recursos son muy feroz competencia, el rendimiento de bloqueo será mejor. (Análisis de escenarios específico)
sychronized no se interrumpe Lock, Lock interrumpible. (Bloqueo Interruptible)
Lock bloqueo justo puede ser proporcionado, de acuerdo con el orden de la cerradura de la dispensación de la solicitud de bloqueo. (Bloqueo de Feria)
puede condicionar las variables y con el uso de múltiples estados para controlar los datos compartidos.

https://blog.csdn.net/weixin_40255793/article/details/80786249

 

utilidad de reentrada de bloqueo y el principio de la aplicación, el proceso de copia de escritura, los bloqueos de lectura-escritura, el segmento de bloqueo (ConcurrentHashMap segmento).

Definición:
Si un programa o subprograma pueden "en ningún momento se interrumpe y el sistema de funcionamiento previsto para la ejecución de otra sección de código, que a su vez llama a la subrutina no puede salir mal",
reclamó como reentrada (reentrante o re- participante) de. Es decir, cuando la subrutina se está ejecutando, un hilo de ejecución puede volver a entrar y ejecutarlo, y
aún así obtener los resultados en línea con las expectativas en tiempo de diseño. Y la ejecución concurrente de múltiples hilos de diferentes flujos seguros, el énfasis de reentrada en volver a entrar en la misma ejecución de la rutina de un solo hilo es todavía seguro.
Principio:
Cada titular de una cerradura asociado con un hilo y un contador cuando el contador es 0 indica que el bloqueo no se lleva a cabo por cualquier hilo, cualquier hilo puede adquirir el bloqueo y llamar a los métodos apropiados;
Cuando un hilo solicitudes con éxito , la JVM recordará hilo mantiene el bloqueo, y el contador se pone a 1, mientras que otro hilo solicita la caja de cerradura, debe esperar;
y el hilo de la celebración de la solicitud de bloqueo si el bloqueo de nuevo, la cerradura puede obtener de nuevo y el contador se incrementa;
cuando un hilo salidas de sincronización de bloque, el contador se decrementa, si el contador es 0, el bloqueo se libera.
Escena:
Cuando el bloqueo de reentrada requiere principalmente varios subprocesos para introducir el código de área crítica, requiere el uso de bloqueo de reentrada.
Cuando un ejemplo específico, como un método sincronizado mencionado anteriormente se requiere un método sincronizado llamar a otra.
bloqueo de escritura:
escribir de encargo bloqueo dependencia del sincronizador funciones isócronas, es decir, sincronizador de estado de sincronización de lectura-escritura. El bloqueo de escritura variable de conformación de corte en dos partes, los 16 bits superiores representan leer, escribir los 16 bits más bajos representan.
operación de lectura-escritura bit de estado de sincronización de bloqueo respectivo Calcular.
Supongamos que el estado de sincronización actual es C, que es un estado de escritura C & 0x0000FFFF, estado de lectura >>> c 16 (0 complemento bits sin signo de 16 bits desplazamiento a la derecha).
Cuando el estado de escritura a un estado de mayor c + 1, cuando un aumento en el estado de lectura, el código de estado es c + (1 <<< 16).
La adquisición de un bloqueo de lectura:
hilo ThreadLocal objetos locales, ahorrarán muchas veces al hilo adquiere el bloqueo en el interior de cada hilo, de modo que cuando el botón de bloqueo no afectará a otros hilos. 
uso tryAcquireShared fullTryAcquireShared cas después de la no obtención de una cerradura.
Primera lectura-escritura estado de bloqueo para todos los hilos adquieren el número de bloqueos de lectura, como es el bloqueo de reentrada, y porque el número de bloqueos de lectura para preservar cada cerradura adquirida por las variables locales para cada cerradura aumentando así el objetivo de lectura ThreadLocal la dificultad del proceso de obtención,
antes de cada adquirir un bloqueo de lectura para determinar si habrá un exclusivo bloqueos de escritura, bloqueos exclusivos de escritura si hay falta de obtención de retorno directo a la cola síncrona.
Si no hay bloqueo de escritura se adquiere, el hilo se puede obtener un bloqueo de lectura, debido a la presencia de bloqueos compartidos, cada uno recibirá los hilos de determinación de tipo, cada hilo con el fin de estado de sincronización adquieren cuando son auto-creciente en sus variables locales correspondientes operación.
cerradura Adquirir escritura:
obtener un bloqueo de escritura en comparación con adquirir un bloqueo de lectura en mucho más simple, antes de adquirir un bloqueo de lectura sólo es necesario para determinar si existe actualmente un bloqueo de lectura, así que si hay una adquisición de bloqueo de lectura falla,
que puede entonces determinar si se debe obtener un bloqueo de escritura para el subproceso actual Si el hilo no es un fracaso cerraduras de entrada de volver de otro modo en aumento desde el valor de estado existente.
Lectura-escritura rebaja de bloqueo:
bloqueo se rebajó degradación del bloqueo de escritura para ser bloqueos de lectura. El caso tiene un bloqueo de escritura en el hilo actual, una vez más para conseguir una rebaja de bloqueo de lectura, bloqueo del proceso de bloqueo de escritura se libera a continuación.
segmento de bloqueo:
. JDK 8 antes, el segmento de bloqueo ConcurrentHashMap bloqueo exclusivo HashTable en su lugar. Segmento de ReentrantLock heredó bloqueo reentrante, con función de bloqueo, mientras que la cadena-como la estructura más comprende una matriz de HashMap.
JDK ha sido abandonado después de 8 segmentos bloqueados por lo siguiente:
la adición de una pluralidad de segmentos de bloqueo desperdicia espacio de memoria.
entorno de producción, el mapa cuando se coloca en competencia con una probabilidad de bloqueo es muy pequeña, pero la cerradura segmento puede causar largas esperas para las actualizaciones y otras operaciones.
Con el fin de mejorar la eficiencia de la GC.

https://www.cnblogs.com/wait-pigblog/p/9350569.html


Bloqueo pesimista, el bloqueo optimista, ventajas y desventajas, CAS tiene ningún defectos, lo que es la solución.

bloqueo optimista:
lo que la lectura y la escritura cada vez menos simultánea modificación, los demás no se modificará cada vez para obtener los datos, por lo que no será bloqueado.
Tiempo de actualización comprobará lo que estos datos no se ha actualizado. Las estrategias específicas es para obtener la versión actual antes de la actualización,
y después comparar el número de versión y el último, y luego actualizar el mismo, y si eso no funciona tendrá que repetir Read - Compara - operación de escritura.
Uso: Bloqueo en el marco de AQS es el primer intento de adquirir cas bloqueo bloqueo optimista, reciben menos, se convertirá en un bloqueo pesimista, como RetreenLock.
Bloqueo pesimista:
el bloqueo pesimista es que escribir más, y la modificación más concurrente, cada vez para obtener los datos se bloqueará, otros querrán leer y escribir datos hasta que el bloque para obtener el bloqueo.
Use: sincronizada
ventajas CAS:
sin bloqueo de bloqueo optimista ligera, por instrucciones de la CPU, y alta en los menos competitivos rendimiento situación de los recursos,
en comparación con el peso de las cerraduras sincronizado, sincronizado será más compleja bloqueo, desbloqueo y estela operación.
desventajas CAS: 
el problema 1. ABA. Antes se actualiza la versión A, se actualiza por la A- intermedia> B-> A, esta vez para obtener los hilos que no han sido actualizados.
clases Java átomos AtomicStampedReference, el número de versión del valor de la variable de control para asegurar la exactitud de CAS.
se añade el número de versión soluciones detalladas en frente de las variables, cada variable se actualiza cuando el número de versión o marca de tiempo más uno,
entonces A - B -. A se convierte 1A - 2B -. 3A
tiempo 2. giro es demasiado largo, consumir recursos de la CPU, si los recursos son altamente competitivos multi-roscado spin-larga consumo de recursos,.

https://blog.csdn.net/qq_20499001/article/details/90315061


bloqueo injusto, la diferencia entre las cerraduras justas.


orden de ejecución multi-hilo de bloqueo de la latitud se bloqueará en la equidad y no participativos cerraduras.
cerraduras justas: Bloqueo antes de esperar a ver si hay un hilo, la superficie superior del hilo de cualquier prioridad, orden de llegada.
bloqueo injusto: una vez CAS intento directo de adquirir el bloqueo cuando está bloqueado, si no se recibe respuesta,
entonces juzgar una vez (método tryAcquire si el bloqueo es de acceso libre, directo) no llegó a ir a la cola de la cola.
ReentrantLock soporta dos cerraduras.
ReentrantLock justas tryAcquire método Notas:
.. Feria tryAcquire versión del No Llamar o de otorgamiento de acceso a no ser que el recursiva Esto hay primer camareros o
versión justa de tryAcquire. A menos que se llama de forma recursiva o no hay camareros, de lo contrario no se les permite el acceso.
Desleales tryAcquire método Notas:
. Realiza nonfair trylock tryAcquire se implementa el en las subclases, pero tanto en la necesidad nonfair trylock Método, para la oportunidad.
Ejecución de la no equidad trylock. tryAcquire está implementada en la subclase, pero ambos métodos desleales para tratar trylock necesidades.
La diferencia es que tryAcquire determinado = 0 (bloqueo de referencia 0), no participativos llamada directa CAS, cerraduras y justas estatales para asegurar que ningún hilo antes de que el hilo actual, y sólo puede ser CAS.
Uso:
uso más directo de la no cerradura justo; cerradura de bloqueo injusto 5-10 veces mayor que el rendimiento justo, debido a la necesidad de mantener la equidad de bloqueo una cola en caso de múltiples núcleos,
Si el hilo actual no es la primera cola no puede obtener un bloqueo, un aumento de los tiempos de conmutación hilo.

https://www.jianshu.com/p/2ada27eee90b
http://www.cnblogs.com/darrenqiao/p/9211178.html


distinción de bloqueo sesgada bloqueo ligero, bloqueos de giro, bloqueo de peso pesado.


bloqueo de bucle:
Si mantiene un recursos de bloqueo en un período muy corto de tiempo puede liberar el bloqueo, otros hilos no necesitan entrar en el estado bloqueado, sólo tiene que esperar un minuto (giro),
y otros comunicados de rosca el bloqueo después de adquisición de bloqueo de inmediato. Esta conmutación entre los hilos de usuario y núcleo que consumen Evita.
Spin es la necesidad de consumir la CPU, es necesario establecer el tiempo de giro, sobre el hilo entra en el tiempo bloqueado.
Ventajas:
hilo de reducción se bloquea, el bloqueo para la siguiente competencia no es muy fuerte, sosteniendo el tiempo de bloqueo es muy corto, el rendimiento ha mejorado tanto, girar
el consumo de CPU es menor que el hilo bloqueado y luego despertar (cambio de contexto hilo se produce dos veces)
Desventajas:
Si competir multi-hilo de los recursos, y el hilo que mantiene el bloqueo por un largo tiempo, entonces, el consumo de CPU spin-espera debe ser
mayor que las secuencias de roscado consumen despertar de nuevo, lo que resulta en una pérdida de la CPU.
umbral de ajuste del tiempo de bloqueo de bucle:
el JDK 1.6 después de la introducción de giro adaptativo tiempo de bloqueo de bucle no es fija,
sino por el mismo tiempo de bloqueo de bucle anterior, y el propietario de la cerradura estado decidir.
La básica pensó un momento de cambio de contexto hilo es el mejor momento.
JVM optimización:
si la carga media <número de CPU, el giro ha sido
superior a la cantidad de CPU / 2 hilos están girando, hilo luego bloqueado directamente
si se le encuentra hilo propietario giro cambia el tiempo de retardo de giro ( el spin-count) o en el bloqueada
si la CPU está en el modo de ahorro se detiene el giro
giro peor tiempo de retardo caso almacenado en la CPU (CPU almacena un un conjunto de datos, que la diferencia de tiempo de CPU B de estos datos directamente)
el giro será apropiado que renunciar a la diferencia entre la prioridad hilo cuando
después de JDK7 parámetros de control de giro por la JVM

bloqueo sesgada:
indicador de bloqueo 01
tienden a bloqueo, como su nombre lo indica, se tenderá a primer acceso el hilo de bloqueo,
si durante el funcionamiento, sólo un hilo de acceso bloqueo de sincronización, además de que dará un hilo de cierre parcial, no es necesario volver a visitar CAS. Si durante el funcionamiento, se reunió con otros hilos para aprovechar la cerradura, sesgado hilo que mantiene será suspendido de bloqueo, JVM eliminará su cuerpo sesgado de bloqueo, los revierte de bloqueo a la cerradura de peso ligero estándar.
Proceso:
Marcos Palabra de bloqueo sesgada identificado como 01, está sesgada bloqueo.
Si es parcial, el estado más puntos de acceso a la ID del hilo del hilo actual.
Si es así, la sincronización directa, si no, comprueba el ID de punto para un hilo está vivo.
Si cuelga, el nuevo hilo está sosteniendo un sesgo de bloqueo, de lo contrario, la actualización es un bloqueo ligero (CAS reemplazar marca de la palabra no).
sesgada de bloqueo se retire primero y luego actualizar, dará lugar a la revocación de STW.

cerradura de peso ligero:
indicador de bloqueo 00
de bloqueo de peso ligero está sesgada por la actualización de la cerradura.
Se refiere a la obtención de dos hilos adquieren alternativamente el hilo de bloqueo u otro umbral de tiempo de bloqueo de giro, que es bloqueo ligero.
En este punto marca de la palabra apunta al marco de pila del subproceso actual.
Si el tiempo excede los cables de umbral a otro hilo en el bloqueo, bloqueo de peso ligero se libera actualizado a la cerradura de peso pesado.

cerradura de peso pesado:
indicador de bloqueo 10
de bloqueo de peso pesado se actualizó de un bloqueo ligero venir.
Múltiples hilos que compiten por la misma cerradura.
En este punto marca de la palabra apunta a sostener marco de pila del hilo de bloqueo de peso pesado.
cerraduras de peso pesado sincronizado:
la JVM saca datos desde el final de la cola para un candidato contención de bloqueo (OnDeck), pero la concurrencia, se accede ContentionList CAS para un gran número de hilos concurrentes, con el fin de reducir la competencia para el elemento de la cola, la JVM se trasladó a una parte de la rosca como un candidato opositor hilo EntryList. hilos de propietario en el desbloqueo, el ContentionList en la migración de parte del hilo a EntryList y especificar un hilo en EntryList es OnDeck hilo (normalmente la primera para ir en ese hilo). Propietario hilo no pasa directamente a un sellador de tornillos OnDeck, pero la contención de bloqueo diestro OnDeck, OnDeck necesidad de contención de re-bloqueo. Aunque esta sacrifica algo de equidad, pero puede mejorar en gran medida el rendimiento del sistema, en la JVM, sino también para elegir este comportamiento como "interruptor competitiva."
OnDeck hilo para adquirir el bloqueo después de recurso se vuelve hilos propietario, pero no consiguió un recurso de bloqueo sigue atrapado en EntryList en. Si el hilo está bloqueado método wait propietario, luego fue trasladado a la cola de WaitSet hasta un determinado momento a notificar, oa notifyAll despierta, irá de nuevo en EntryList.
Sincronizados cerraduras no justas. Sincronizada en el hilo entra ContentionList, esperando hilos intentará adquirir el giro de bloqueo, si no se puede conseguir en el ContentionList, que para el hilo obvio que ha entrado en la cola no es justo, no es una cosa injusta es conseguir el giro hilo de bloqueo puede también dirigir los recursos para aprovechar el bloqueo OnDeck hilo.
ContentionList -> EntryList -> OnDeck -> Propietario -> WaitSet -> EntryList (espera 后 notificar 回到 EntryList)

https://blog.csdn.net/zqz_zqz/article/details/70233767
https://blog.csdn.net/tian251yu/article/details/80638104

 

Cómo ABC tres hilos para asegurar el orden de ejecución.


cerradura Fair manera:
de ReentrantLock de ReentrantLock Lock nuevos nuevos = (a true);
Lock.lock ();
BlockingQueue manera:
un LinkedBlockingQueue nuevo nuevo = a Queue LinkedBlockingQueue ();
queue.put ();
queue.poll ();


¿Cuáles son el estado de la rosca.


Nuevo (New): crea un nuevo objeto hilo.
Listo (Ejecutable): Una vez creado el hilo, llamar al método start. El hilo está presente en "grupo de subprocesos ejecutables", solamente esperando a que el derecho de uso de la CPU.
Correr (Correr): alcanzar la CPU hilo listo, corre.
Bloqueado (bloqueado): hilo conductor por alguna razón (llamar al método de espera) para dar el derecho de uso de la CPU, pausas,
hasta que el hilo se despierta en el estado preparado (llamada para notificar método), tienen la oportunidad de correr.


https://www.cnblogs.com/jijijiefang/articles/7222955.html

La diferencia entre el sueño y espera.


el sueño es un método de clase Thread, el método espera es la clase Object.
El sueño no liberar el bloqueo, el método espera libera el bloqueo, el hilo espera volver a entrar en el grupo de subprocesos bloqueados
hasta que el otro subproceso llama a notificar a / notifyAll entrar en el estado listo.
sueño (milisegundos) se puede especificar el tiempo por lo que activará automáticamente, sólo puede ser llamado si es menor de interrupción () interrumpida por la fuerza.
Thread.Sleep papel (0) es "sistema operativo inmediatamente dispara una competición re-CPU."

https://www.cnblogs.com/plmnko/archive/2010/10/15/1851854.html


La diferencia notificar y notifyAll.

La diferencia clave entre notificar y notifyAll que notifican () sólo se despierta un hilo, el método notifyAll despertará todas las discusiones.
De hecho, cada objeto tiene dos piscinas, piscina están a la espera de la piscina de bloqueo (entrySet) y (WaitSet).

piscina de bloqueo: Si tienen una rosca adquirió la cerradura, esta vez otras necesidades hilo B a adquirir el bloqueo (tales como la necesidad de llamar al método de modificación sincronizada o la necesidad de llevar a cabo los bloques de código modificadas sincronizados), ya que la cerradura ya está ocupado, por lo que el hilo B sólo puede esperar a que el bloqueo, esta vez el hilo B entrará en la piscina de bloqueo de bloqueo.
Espere piscina: Un hilo se supone que después de que el bloqueo se adquiere, no satisface un número de condiciones (por ejemplo, el modo de bloqueo Productor Consumidor adquirida, y determina la cola está llena), entonces llamada de método espera requiere el bloqueo de objeto, el hilo un dé se la cerradura y entrar en la cerradura de la lista de espera.
Si hay otro hilo llama al método notificar cerraduras seleccionarán un hilo de la lista de espera de acuerdo con ciertos algoritmos, bloquee este hilo en la piscina.
Si hay otras llamadas hilo notifyAll bloqueo método, se le estará esperando en todos los temas en la piscina más piscina en la cerradura, y la competencia de bloqueo.
piscina bloqueo de la diferencia y la lista de espera: espera hilo piscina no puede adquirir el bloqueo, pero las necesidades de bloqueo para ser despertado en la piscina, tienen la oportunidad de adquirir el bloqueo.

https://blog.csdn.net/liuzhixiong_521/article/details/86677057


ThreadLocal comprensión, el principio de la aplicación.

ThreadLocal proporcionar una variable local hilo (hilo), cada hilo para acceder a una variable tiene sus propias variables locales.
Enhebrar cada objeto tiene un ThreadLocalMap, al crear un ThreadLocal y van a añadir los objetos ThreadLocal al mapa, donde la clave es ThreadLocal, el valor puede ser cualquier tipo.

https://www.jianshu.com/p/ee8c9dccc953

Publicados 115 artículos originales · ganado elogios 58 · Vistas de 230.000 +

Supongo que te gusta

Origin blog.csdn.net/Angry_Mills/article/details/82107312
Recomendado
Clasificación