2017-03-18 9 views
0

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?

+1

ja, genau. Es sei denn, Sie bereiten einen eigenen Thread-Pool vor, in dem jeder Thread die gewünschte ThreadLocal-Variable enthält. –

+0

@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

+1

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(). –

Antwort

0

ja, scala Futures haben Local.scala, die den Status über die thenCompose/thenApply-Methoden (dh. FlatMap/map-Methoden) überträgt. Java fehlt wirklich, was es für Plattformentwickler sehr schwierig macht, eine Plattform zu erstellen, die den Status von Plattform zu Client-Code überträgt, der dann wieder in die Plattform zurückgerufen wird. Es ist ziemlich frustrierend, aber scala hat viel zu viele Features (es ist wie die Küchenspüle), also während übersichtlich, finde ich Projekte außer Kontrolle geraten schneller als Menschen (einschließlich mir) neigen dazu, verschiedene Entscheidungen zu treffen.

Verwandte Themen