Java >> Java tutorial >  >> Java

Java Cached trådpool og tråd lokal

Som standard genbruges ThreadLocals sammen med tråden. Hvis du har brug for, at de skal geninitialiseres, kan du gøre det ved at tilsidesætte de metoder, der er angivet nedenfor:

fra javadoc til java.util.concurrent.ThreadPoolExecutor

Hook-metoder Denne klasse giver beskyttede tilsidesættelige beforeExecute(java.lang.Thread, java.lang.Runnable) og afterExecute(java.lang.Runnable, java.lang.Throwable) metoder, der kaldes før og efter udførelse af hver opgave. Disse kan bruges til at manipulere eksekveringsmiljøet; for eksempel geninitialisering af ThreadLocals, indsamling af statistik eller tilføjelse af logposter. Derudover kan metode terminated() tilsidesættes for at udføre enhver speciel behandling, der skal udføres, når eksekutoren er helt afsluttet. Hvis hook- eller callback-metoder giver undtagelser, kan interne arbejdstråde til gengæld svigte og brat afsluttes.


Du kan rydde trådens lokale pool for en tråd ved hjælp af refleksion. Du kan gøre

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

Hvis tråden returneres til puljen, vil ThreadLocal-variablen stadig være knyttet til den. Når du bruger ThreadLocals med pools, skal du være omhyggelig med at kunne indstille, hvornår tråden trækkes fra poolen og deaktiveres, før den returneres.


Java tag