ThreadLocal bindet Daten an einen bestimmten Thread. Für CompletableFuture wird es mit einem Thread aus dem Thread-Pool ausgeführt, der möglicherweise ein anderer Thread ist.Ist es sicher, ThreadLocal mit CompleableFuture zu verwenden?
Bedeutet das, wenn CompleableFuture ausgeführt wird, ist es möglicherweise nicht möglich, die Daten von ThreadLocal zu erhalten?
ja, genau. Es sei denn, Sie bereiten einen eigenen Thread-Pool vor, in dem jeder Thread die gewünschte ThreadLocal-Variable enthält. –
@AlexeiKaigorodov Wie wäre es, wenn ich thenApply anstelle von thenApplyAsync verwende, kann ich dann immer im selben Thread ausführen? So kann ich ThreadLocal zum Speichern/Lesen von Daten verwenden. – franziga
gibt es keine Garantie, auf welchen Thread thenApply ausgeführt wird. Wenn Sie auf einige allgemeine Daten zugreifen möchten, platzieren Sie diese Daten in einer Klassenvariablen und verwenden Sie eine Methode dieser Klasse als Parameter für thenApply(). –