問題タブ [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.

0 投票する
2 に答える
2770 参照

java - サーブレットのSimpleDateFormat

サーブレット内で多くのSimpleDateFormatオブジェクトを使用しています。残念ながら、SimpleDateFormatはスレッドセーフではありません。したがって、SimpleDateFormat-objectsの再利用を促進するために、それをThreadLocalでラップすることを考えました。これを有効にするためにutil-classを作成しました。

実際、これはメモリリークにつながるようです。Webアプリケーションをシャットダウンすると、Tomcatは次のエラーメッセージをログに記録します。

重大:Webアプリケーション[]は、タイプ[null](値[com.example.util.DateUtil$2@50242f7d])のキーとタイプ[java.text.SimpleDateFormat](値[java.text])の値でThreadLocalを作成しました.SimpleDateFormat @ d91b489b])が、Webアプリケーションが停止したときに削除できませんでした。これにより、メモリリークが発生する可能性が非常に高くなります。

メモリリークの理由は理解していますが、サーブレット内でSimpleDateFormatオブジェクト(またはその他のスレッドセーフでないオブジェクト)を処理するための最良の方法は何ですか?

0 投票する
5 に答える
4415 参照

java - データのコンテキストとして ThreadLocal を使用するのは良い考えですか?

ThreadLocal を Web アプリケーションのデータのコンテキストとして使用することは良い考えですか?

0 投票する
5 に答える
3714 参照

java - ThreadLocal は TLAB に割り当てられていますか?

ThreadLocal 変数は Thread Local 割り当てバッファーまたは TLAB に割り当てられていると思いますが、そうですか?

一部のクラスを TLAB に格納する正確な理由を示すドキュメントを見つけることができませんでした。いくつか知っている場合は、リンクを投稿してください。

0 投票する
2 に答える
2262 参照

java - ThreadLocals とサイドバイサイド クラスローディングの効果

仮定

A が vm 上の 1 つのクラスローダだけにロードされている場合、t1 の値は明らかです。しかし、A が 2 つの異なるクラスローダーに並んでロードされた場合、t1 はどうなりますか? 値は特定のスレッドで共有されますか?

0 投票する
6 に答える
6839 参照

java - サーブレット3の仕様とThreadLocal

私の知る限り、サーブレット3の仕様では非同期処理機能が導入されています。特に、これは、同じスレッドが別の同時HTTPリクエストを処理するために再利用できることを意味します。これは、少なくとも以前にNIOで働いたことのある人にとっては革命的ではありません。

とにかく、これは別の重要なことにつながります。リクエストデータの一時ストレージとしての変数はありません。ThreadLocal同じスレッドが突然別のHTTPリクエストのキャリアスレッドになると、リクエストローカルデータが別のリクエストに公開されるためです。

それはすべて、記事を読んだことによる私の純粋な推測であり、サーブレット3の実装(Tomcat 7、GlassFish 3.0.Xなど)で遊ぶ時間がありません。

だから、質問:

  • ThreadLocalリクエストデータを保持するための便利なハックではなくなると思いますか?
  • 誰かがサーブレット3の実装のいずれかで遊んでThreadLocal、上記を証明するためにsを使用しようとしたことがありますか?
  • HTTPセッション内にデータを保存する以外に、アドバイスできる同様の簡単にアクセスできるハックはありますか?

編集:私を誤解しないでください。私は危険とThreadLocalハックであることを完全に理解しています。実際、私は常に同じような状況でそれを使用することはお勧めしません。ただし、信じられないかもしれませんが、スレッドコンテキストは、おそらく想像するよりもはるかに頻繁に使用されています。良い例はOpenSessionInViewFilter、JavadocによるとSpringのものです。

このフィルターは、トランザクションマネージャーによって自動検出される現在のスレッドを介してHibernateセッションを利用できるようにします。

これは厳密にThreadLocalはチェックされていませんが(ソースをチェックしていません)、すでに憂慮すべきことに聞こえます。私はもっ​​と似たシナリオを考えることができます、そしてウェブフレームワークの豊富さはこれをはるかに可能性の高いものにします。

簡単に言えば、多くの人々は、意識の有無にかかわらず、このハックの上に砂の城を建てました。したがって、スティーブンの答えは理解できますが、私が求めているものとはまったく異なります。誰かが実際に試みて失敗した行動を再現できたかどうかを確認したいので、この質問は同じ問題に巻き込まれた他の人への参照点として使用できます。

0 投票する
3 に答える
10080 参照

scala - いつscala.util.DynamicVariableを使うべきですか?

スカラトラのソースを読んだとき、次のようなコードがあることがわかりました。

という名前の興味深いクラスがありDynamicVariableます。このクラスのドキュメントを見ましたが、いつ、なぜそれを使用すべきかわかりません。withValue()通常使用されるものがあります。

それを使用しない場合、それが解決した問題を解決するために、代わりにどのコードを使用する必要がありますか?

(私はscalaを初めて使用します。コードを提供できれば、それは素晴らしいことです)

0 投票する
1 に答える
1748 参照

java - javaスレッドローカルシングルトン - それは何ですか?

簡単に言えば、オブジェクトが Java のスレッドローカル シングルトンであると誰かが言うとき、それはどういう意味ですか? 私は Java Server Faces についての講義に出席していましたが、FacesContext について話すたびに、講師はそれがスレッドローカル シングルトンであることを常に思い出させてくれました。

0 投票する
1 に答える
718 参照

grails - 応答が書き込まれた後にスレッドローカルをクリーンアップする方法は?

ThreadLocal を使用する Grails アプリケーションがあります。

現在、ThreadLocal の入力とクリアはフィルターによって処理されます (: 入力、: クリア)。

問題は、フィルターのafter -call がテンプレートがレンダリングされる前に実行されるため、必要な変数がすべて早期に null になることです。応答が完全に書き込まれた後に ThreadLocals のクリアをトリガーする簡単な方法はありますか?

1 つの方法は、ThreadLocal を設定する前にクリアすることです。これにより、すべての作業をフィルターの呼び出し前に残します。しかし、変数が何にも使用されなくなった後、変数を「運ぶ」ThreadLocalを残すという考えは好きではないので、何か他のものが必要です。

0 投票する
0 に答える
124 参照

regex - Pex インストルメンテーションによってコードの効果が変わる可能性はありますか?

簡単な JSON lexer クラスがあります。を取り、stringを生成しIJSONValueます。これにIJSONValueToJSONString、有効な JSON 文字列を返すメソッドがあります。

もちろん、そのためのコードは非常に複雑で、多くの分岐があります。だからこそ、これはペックスの能力をテストするのに最適な場所だと思った. 次のテストを作成しました。

これで Pex を実行すると、null 処理に関するいくつかの非問題が見つかりましたが、これは修正済みです。ただし、意味をなさない例外を報告する多くのメソッドも取得しました。それらは次のようになります。

ただし、これは、動作することがわかっている私のテストの 1 つとかなり似ています。デバッガー内とデバッガー外で実行しましたが、どちらの場合もテストに合格しました。最も不可解なことは、例外テキストが実際には何らかの意味を成すことです。Constant正規表現が文字列と一致しなかった場合に報告されるテキストです"false"。他の正規表現の不一致についても同様の例外が発生しますが、これは意味がありません。

Pex がこれが例外をスローすると考えるのはなぜですか? インストルメンテーションが混乱しThreadLocalたりRegex、奇妙な方法で混乱したりしますか? これが私の正規表現保持クラスの外観です (簡潔にするために正規表現は編集されています)。

0 投票する
8 に答える
10871 参照

java - ServletRequest と Response をサーブレットに格納するための ThreadLocal: 何のために?

パターンに出くわしたらServletRequest、応答オブジェクトがサーブレットのローカルThreadLocal変数に配置されます。サーブレット クラスには、現在の要求および応答オブジェクトを取得するメソッドもあります。したがって、これらのオブジェクトを取得するには、サーブレット オブジェクトを操作する必要があります。

ThrealLocalこれらのローカル変数を持つことのポイントは何ですか?