Ich versuche herauszufinden, wie ich einen ThreadLocal-Wert in Java-8-Parallel-Stream kopieren kann.
Wenn wir das bedenken:
%Vor%Welche Ausgänge
%Vor%Gibt es eine Möglichkeit für mich, die ThreadLocal-Methode von der main () -Methode in die Threads zu klonen, die für jede parallele Ausführung erzeugt werden?
So dass mein Ergebnis ist:
%Vor%anstelle der ersten?
Wie Louis in den Kommentaren gesagt hat , Ihr Beispiel kann sehr gut reduziert werden, um den Wert einer lokalen Variablen im Lambda-Ausdruck
zu erfassen %Vor%Es ist nicht offensichtlich aus Ihrem Beispiel, was die vollen Anwendungsfälle sind.
Wenn Sie genau wissen, welche Threads in Ihrem Hauptthread gestartet sein sollen, sollten Sie ein InheritableThreadLocal
Diese Klasse erweitert
ThreadLocal
, um Vererbung von Werten zu liefern Übergeordneter Thread zu untergeordneten Thread : Wenn ein untergeordneter Thread erstellt wird, wird der child erhält Anfangswerte für alle vererbbaren thread-local Variablen, für die der Vater Werte hat.
Wenn in Ihrem Fall val
als InheritableThreadLocal
deklariert wird, da die Thread
Instanzen, die für parallel()
in ForkJoinPool#commonPool()
erstellt wurden, träge erstellt werden, würden sie alle vom Wert set
in main
Methode (und Thread).
Dies wäre nicht der Fall, wenn Sie irgendwie den commonPool
(oder den Pool, den die parallel
terminal-Operation aufgerufen hat) verwendet haben, bevor Sie den InhertiableThreadLocal
-Wert im Ursprungs-Thread setzen.
Tags und Links java java-8 threadpool forkjoinpool