Frage

Ich verwende ThreadLocal Variablen (durch Clojure des Vars, aber die folgende ist das gleiche für Normal ThreadLocals in Java) und sehr häufig in der Frage führen, dass ich nicht sicher sein kann, dass ein bestimmter Code-Pfad auf die genommen werden gleicher Thread oder in einem anderen Thread. Für Code unter meiner Kontrolle ist dies offensichtlich nicht zu groß ein Problem, aber für polymorphen Code von Drittanbietern gibt es manchmal nicht einmal eine Möglichkeit, um statisch festzustellen, ob sie Single-Threaded-Ausführung zu übernehmen.

ist sicher

Ich neige dazu, zu glauben, das ein mit ThreadLocals inhärenten Problem ist, aber ich würde gerne einige Hinweise auf hören, wie sie in einer sicheren Weise zu nutzen.

War es hilfreich?

Lösung

Dann ThreadLocals nicht verwenden! Sie sind speziell für die, wenn Sie eine Variable wollen, die mit einem Thema verknüpft ist, als ob es eine Map<Thread,T> waren.

Andere Tipps

Der typische Anwendungsfall (soweit ich weiß) für einen Thread ist in einer Web Application Framework. Ein HTTP-Filter erhält eine Datenbankverbindung auf einer eingehenden Anfrage und speichert die Verbindung in einem statischen Thread. Alle nachfolgenden Controller die Verbindung benötigen, kann sie aus dem Rahmen leicht erhalten einen statischen Aufruf verwenden. Wenn die Antwort zurückgegeben wird, gibt den gleichen Filter wieder die Verbindung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top