問題タブ [thread-local]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - request.getSession() vs getThreadLocalRequest().getSession()
違いは何ですか
と
私が維持しているアプリケーションは、最初のサーブレットをそのまま使用し、2 番目のサーブレットを拡張する GWT-RPC を介して実装されたものを使用しているようです。
python - ピラミッド - レスポンスの app_iter 内でスレッドローカルが機能しない
次のサンプル コードを使用します。
現在のリクエストを取得します: None。それで、threadlocal
内部では動作しませんapp_iter
か?threadlocal
ビューから離れたいくつかのレイヤーにアクセスする必要がある実際のコードがあり、request
変数を渡すのは面倒です。
multithreading - Spring Security: 複数の ThreadLocals で同じ SecurityContext-instance が使用されていますが、これはどのように機能しますか?
Spring Security 3.0.5 と SecurityContext についていくつか質問があります。まず第一に、私が知っていることを結論付けようとします:
- SecurityContextHolder は SecurityContext を格納します
- リクエスト間、SecurityContext は HttpSession に格納されます
- リクエストの開始: SecurityContextHolder は HttpSession から SecurityContext を取得します
リクエストの終わり: SecurityContextHolder は SecurityContext を HttpSession に入れます
リクエスト中、サーバー上で、SecurityContextHolder は ThreadLocal を使用します。アプリケーション (同じ要求) のどこでも、SecurityContext にアクセスできます。
今私の質問....
--> 2 つの要求: SecurityContext インスタンスが共有されます
これはどのように作動しますか?つまり、SecurityContextHolder はリクエストごとに ThreadLocal を使用します。2 リクエスト = 2 ThreadLocals
各リクエストは次のことを行います: HttpSession からの getSessionAttribute (SecurityContext) それらが SecurityContext で機能するとどうなりますか? SecurityContext はすべての ThreadLocals で変更されていますか?
私の知る限り:はい(??)
これはどのように作動しますか?同じインスタンスでどのように作業できますか? つまり、2 つの異なる ThreadLocals を持つ 2 つの異なるスレッドが同じインスタンスでどのように機能するのか想像できませんか?
API (ThreadLocal): このクラスはスレッドローカル変数を提供します。これらの変数は、(get メソッドまたは set メソッドを介して) アクセスする各スレッドが独自の、独立して初期化された変数のコピーを持っているという点で、通常の変数とは異なります。
つまり、それだけです:コピー!多分私は間違っていて、2 つのスレッドが同じ SecurityContext で動作することはできないのでしょうか? しかし、Spring Security Documentation はそう言っています!
誰かが私にそれを説明できれば素晴らしいでしょう:-)ありがとう!
java - 匿名イテレータのフィールドで使用すると、ThreadLocalの動作がおかしくなります
次のようなメソッドでIterableを実装する内部クラスがあります。
ひどく(私にとって)、場合によっては、fooの値はbaz内でnullですが、barの値は0です(フィールドが初期化されるときにnullポインター例外はありません)。また、スタックトレースを出力すると、新しく構築されたFooオブジェクトで値を設定するThreadLocalのsetメソッドが呼び出されるため、そもそもフィールドがnullであるのは奇妙ですが、これは別の問題である可能性があります。 。
ここで何が起こっているのか誰か知っていますか?
java - ThreadSafeオブジェクトをThreadLocalに配置することに何か利点はありますか?
ThreadLocal
最近、オブジェクトを使用してその中に保持するコードを見つけましたConcurrentHashMap
。
これには論理/利点がありますか、それとも冗長ですか?
boost - スレッドごとに1つのインスタンスを割り当てる(ブースト環境)
Boostは初めてで、スレッド化されたアプリケーションで機能する必要のあるロギングクラスを再設計しています。それはostreamオブジェクトのように機能するように設計されましたが、「機能しませんでした」(Davinciのヘリコプターへの彼の言及を知っている人のためにEddy Izzardの声で言いました)。
次のように使用できます。
したがって、元々はシングルトンとして設計されており、いくつかのアプローチの後、おそらくLogger :: instance()がスレッドに固有のロガーを返すことができると思いました。STLを使用して、BoostThreadIDとLoggerクラスのインスタンスの間のマップを定義する場合があります。
それから私は、スレッドローカルストレージの形式を使用してこれを行うためのよりスマートな方法があるのではないかと考え始めました。
マップの問題の1つは、スレッドが終了したときに定期的にロガーを削除するために、ハウスクリーニングを実行する必要があることです。私は物事を再発明しているように感じ始めました。
Boostがスレッドローカルストレージをサポートしていることがわかります。
何か考えや警告はありますか?
ありがとう、
ケニー
java - ExecutorServiceからフェッチされた新しいスレッドへのThreadLocalの伝播
ExecutorServiceとFuture(ここにサンプルコード)を使用して、タイムアウトのある別のスレッドでプロセスを実行しています(スレッドの「生成」はAOPアスペクトで行われます)。
現在、メインスレッドはResteasyリクエストです。Resteasyは、1つ以上のThreadLocal変数を使用して、Restメソッド呼び出しのある時点で取得する必要のあるコンテキスト情報を格納します。問題は、Resteasyスレッドが新しいスレッドで実行されているため、ThreadLocal変数が失われることです。
Resteasyが使用するThreadLocal変数を新しいスレッドに「伝播」するための最良の方法は何でしょうか。Resteasyはコンテキスト情報を追跡するために複数のThreadLocal変数を使用しているようです。私は、すべての情報を新しいスレッドに「盲目的に」転送したいと思います。
サブクラス化とbeforeExecuteThreadPoolExecutor
メソッドを使用して現在のスレッドをプールに渡す方法を確認しましたが、ThreadLocal変数をプールに渡す方法が見つかりませんでした。
なにか提案を?
ありがとう
java - Spring MVC アプリで ThreadLocal ユーティリティが常に null を返すのはなぜですか?
Spring MVC アプリに一時データを保存するために、次のユーティリティ クラスを作成しました。
だから私は電話しますFooUtil.setFooId("foo")
。
しかし、後で を呼び出すとFooUtil.getFooId()
、常に が返されますnull
。
コンストラクターが必要ですか? それとも、これは抽象クラスであってはなりませんか? 知らない。
java - Java では、ThreadLocal オブジェクトが変更された場合、その変更は次のリクエストで保持されますか?
典型的な Web アプリケーションでは、リクエストが来ると、フィルタは HTTP セッションで Context オブジェクトを探します。存在しない場合は、Context オブジェクトを作成し、http セッションに保存します。さらに、この Context オブジェクトは ThreadLocal オブジェクトにも格納されます。パスの下にあるサーブレットは、この Context オブジェクトを ThreadLocal から取得して変更します。応答が返されると、フィルターは ThreadLocal の Context オブジェクトを null にするようになりました。ユーザーが別のリクエストを行ったときに、変更された Context オブジェクトを確認できるでしょうか?
ありがとうQuadir
clojure - Clojure のスレッドローカル カウンター
特定の関数がリクエスト (スレッド) で呼び出された回数を追跡できるようにしたい Web アプリがあります。
ref を使用してスレッド ローカル以外の方法で実行できることはわかっていますが、スレッド ローカルで実行するにはどうすればよいでしょうか。