tcmd manejo mac desinstalar cache borrar java multithreading concurrency threadpool thread-local

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); } }