2017-03-18 10 views
0

ThreadLocalは、特定のスレッドにデータをバインドします。 CompletableFutureの場合は、スレッドプールからスレッドを実行します。これはスレッドとは異なる場合があります。CompletableFutureでThreadLocalを使用するのは安全ですか?

CompletableFutureを実行すると、ThreadLocalからデータを取得できないことがありますか?

+1

はい、正確です。独自のスレッドプールを用意しておかないと、各スレッドが目的のThreadLocal変数を持ちます。 –

+0

@AlexeiKaigorodov thenAppAppAsyncの代わりにThenAppApplyを使用すると、私はいつも同じスレッドで実行できることを保証しますか?ですから、私はThreadLocalを使ってデータを保存/読み込みできます。 – franziga

+1

どのスレッドに対してthenAppApplyが実行されるかに関する保証はありません。いくつかの共通データにアクセスする場合は、そのデータをクラス変数に置き、そのクラスのメソッドをthenApply()のパラメータとして使用します。 –

答えて

0

はい、scala Futuresには、thenCompose/thenApplyメソッド(つまり、flatMap/mapメソッド)を通じて状態を転送するLocal.scalaがあります。 Javaは、プラットフォーム開発者がプラットフォームからクライアントコードへ状態を渡すためのプラットフォームを作成することを非常に難しくしていることが本当に分かりません。スケーラは非常にイライラしていますが、スケーラは機能が多すぎます(キッチンシンクのようなものです)ので、簡潔には私を含む人間がすべて異なる選択をする傾向があるため、プロジェクトのコントロールが速くなります。

関連する問題