manejo - Grupo de subprocesos en caché de Java e hilo local
java tcmd helper android (3)
Tengo una pregunta sobre Java y concurrencia.
Digamos que tengo una variable ThreadLocal llamada a. Y utilizo CachedThreadPool para obtener nuevos hilos. Cuando se vuelve a ejecutar un hilo, ¿qué ocurre con la variable ThreadLocal? Mantiene el mismo valor (porque es el mismo hilo) o comienza vacío (como si el hilo fuera nuevo)?
Gracias
Por defecto, ThreadLocals se reutiliza junto con el hilo. Si necesita que se reinicialicen, puede hacerlo anulando los métodos que se detallan a continuación:
de javadoc para java.util.concurrent.ThreadPoolExecutor
Métodos de enganche Esta clase proporciona métodos anulables protegidos (java.lang.Thread, java.lang.Runnable) y afterExecute (java.lang.Runnable, java.lang.Throwable) anulados antes y después de la ejecución de cada tarea. Estos se pueden usar para manipular el entorno de ejecución; por ejemplo, reiniciando ThreadLocals, recopilando estadísticas o agregando entradas de registro. Además, el método terminado () puede anularse para realizar cualquier procesamiento especial que deba realizarse una vez que el Ejecutor haya terminado por completo. Si los métodos hook o callback arrojan excepciones, los subprocesos internos del trabajador pueden a su vez fallar y terminar abruptamente.
Si el hilo se devuelve al grupo, la variable ThreadLocal seguirá adjuntada. Al utilizar ThreadLocals con pools, debe tener cuidado de poder establecer cuándo se extrae el hilo del grupo y deshacerlo antes de que se devuelva.
Puede borrar el grupo local de subprocesos para un subproceso usando reflexión. Tu puedes hacer
public static void clearAllThreadLocals() {
try {
Field threadLocals = Thread.class.getDeclaredField("threadLocals");
threadLocals.setAccessible(true);
threadLocals.set(Thread.currentThread(), null);
} catch (Exception e) {
throw new AssertionError(e);
}
}